zeerd's blog         Search     Categories     Tags     Feed

闲来生雅趣,无事乐逍遥。对窗相望雪,一盏茶香飘。

利用WEB搜索功能实现文字复制到剪贴板

#Clip @Android


Contents:
有一些阅读软件——比如kindle的android版本——本身是不支持任意文字的复制功能的。这就导致有些时候想做读书笔记还需要把这段文字重新录入一遍。费时费力。
但是,好在kindle提供了网页搜索功能,让读者可以选择一段文字然后在google等网页中进行搜索。
现在,我就利用这个搜索功能将文字输出到剪贴板中。

需要准备的工作如下:

首先,在Eclipse中创建一个新的Android的工程,我将其命名为EZTools(以后还要在里面添加其他功能)。

然后,通过Project Explorer给EZTools工程添加一个新的class,命名为search2clip,然后把它弄成一个Activity,内容如下:

public class search2clip extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String words = intent.getStringExtra(SearchManager.QUERY);
//Toast.makeText(getApplicationContext(), words, Toast.LENGTH_LONG).show();

ClipboardManager mClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
mClipboard.setText(words);
}
}

这个class用于将接收到的search字符串存放到剪贴板中。
注意:这里使用的是api-10中的函数用法。我没有更高等级版本的设备,没有实验高版本中是否可用。而google在api-11之后引入了新的剪贴板函数。

准备好了新的Activity之后,我们要把它添加到Manifest中。
打开EZTools工程的AndroidManifest.xml文件,选择Application标签。
在其中添加一个新的Application。注意,选择“Create a new element at the top level, in Application”项目。然后将其Name指定为我们刚刚创建的新的Activity(emneg.zeerd.eztools.search2clip)。
接下来,给这个新的application添加Intent Filter,指定其Action为android.intent.action.WEB_SEARCH,category为android.intent.category.DEFAULT。当然,如果你愿意,也可以为Intent Filter指定Label字符串。这个字符串会显示在用户选择Intent时的列表中。
Copy To Clip
最终的AndroidManifest.xml大概是下面的样子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="emneg.zeerd.eztools"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="emneg.zeerd.eztools.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="emneg.zeerd.eztools.search2clip">
<intent-filter android:label="@string/search2clip">
<action android:name="android.intent.action.WEB_SEARCH"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>

</manifest>


至此,大功告成。在Kindle中,选中一段文字,然后选择“更多选项”->“在浏览器中搜索”,然后就可以看到我们自己的应用程序了。

另外,如果不想发送到剪贴板,还可以直接发送到“分享”,直接选择其他Application进行进一步操作。只需要把前面的class替换成如下:

public class Search2Share extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String words = intent.getStringExtra(SearchManager.QUERY);
//Toast.makeText(getApplicationContext(), words, Toast.LENGTH_LONG).show();

Intent intent2 = new Intent(Intent.ACTION_SEND);
intent2.setType("text/plain");
intent2.putExtra(Intent.EXTRA_SUBJECT, "");
intent2.putExtra(Intent.EXTRA_TEXT, words);
startActivity(Intent.createChooser(intent2, ""));
}
}


最后附上ToClip版本的完整Android工程文件。
EZTools Project