3

是否可以通过意图过滤器和广播接收器获取复制的文本?我想开发一个字典应用程序,当用户在手机中的任何地方复制文本时,我想显示文本的含义。目前我已经尝试使用 Base Activity 来注册监听器,但它不符合我的需要。

 mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

        listener = new ClipboardManager.OnPrimaryClipChangedListener() {
            public void onPrimaryClipChanged() {
                performClipboardCheck();
            }
        };
        mClipboard.addPrimaryClipChangedListener(listener);
4

3 回答 3

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())
            }

        })
于 2017-10-05T18:16:49.067 回答
1

您可以编写一个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" />

希望对您有所帮助。

于 2018-08-19T14:53:31.203 回答
0

是否可以通过意图过滤器和广播接收器获取复制的文本?

不。

于 2015-09-11T14:04:33.847 回答