【问题标题】:is it possible to get clipboard manager via intent-filter and broadcastreceiver?是否可以通过意图过滤器和广播接收器获取剪贴板管理器?
【发布时间】:2015-09-11 13:59:41
【问题描述】:
是否可以通过意图过滤器和广播接收器获取复制的文本?
我想开发一个字典应用程序,当用户在手机中的任何地方复制文本时,我想显示文本的含义。
目前我已经尝试使用 Base Activity 来注册监听器,但它不符合我的需要。
mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
listener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
performClipboardCheck();
}
};
mClipboard.addPrimaryClipChangedListener(listener);
【问题讨论】:
标签:
android
broadcastreceiver
intentfilter
clipboardmanager
【解决方案1】:
我就是这样做的,先打开你的应用程序然后关闭它,但如果想继续运行,你也可以编写服务
对于 Java
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener( new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
String a = clipboard.getText().toString();
Toast.makeText(getBaseContext(),"Copy:\n"+a,Toast.LENGTH_LONG).show();
}
});
对于科特林
clipboard= this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.addPrimaryClipChangedListener (object : ClipboardManager.OnPrimaryClipChangedListener{
override fun onPrimaryClipChanged() {
Log.d(TAG,"Copy:\n= "+clipboard.primaryClip.toString())
}
})
【解决方案2】:
您可以写一个service 来检查剪贴板并将接收器附加到那里的ClipboardManager。
所以服务类应该是这样的:
class ClipBoardService : Service(), ClipboardManager.OnPrimaryClipChangedListener {
override fun onPrimaryClipChanged() {
val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
if (manager.primaryClip.itemCount > 0) {
val clip = manager.primaryClip.getItemAt(0).text.toString()
toast(clip)
}
}
override fun onBind(intent: Intent): IBinder {
return Binder()
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
initReceiver()
return START_STICKY
}
private fun initReceiver() {
val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
manager.removePrimaryClipChangedListener(this)
manager.addPrimaryClipChangedListener(this)
}
}
您可以使用自己的操作创建广播接收器并将其注册到您的活动的onStart 并在活动的onStop 上取消注册,然后在您的服务中使用sendBroadcast 方法向您的活动发送意图
不要忘记在清单文件中声明服务
<service
android:name=".clipboard.ClipBoardService"
android:enabled="true"
android:exported="true" />
希望对您有所帮助。
【解决方案3】:
是否可以通过意图过滤器和广播接收器获取复制的文本?
没有。