如何在用户复制android中的内容时收到通知?

时间:2016-01-06 05:21:34

标签: android copy-paste

我想在用户将某些内容复制到剪贴板时执行某些操作,并且我知道ClipboardManager中有一个事件,如下所示:

class ClipboardListener implements ClipboardManager.OnPrimaryClipChangedListener
{
   public void onPrimaryClipChanged()
   {
      // use getPrimaryClip() to get the data or simply display a toast
   }
}

ClipboardManager clipBoard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener( new ClipboardListener() );

但我想知道如何在用户关闭我的应用程序时收到通知,然后用户将其他应用程序中的内容复制到剪贴板。 我应该使用Service,如果是这样的话?

1 个答案:

答案 0 :(得分:4)

首先,您需要将这些权限添加到AndroidManifest:

<uses-permission android:name="android.permission.GET_CLIPS" />
<uses-permission android:name="android.permission.READ_CLIPS" />
<uses-permission android:name="android.permission.WRITE_CLIPS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

然后,您需要添加如下服务:

public class Clipboard extends Service {
private ClipboardManager mCM;
IBinder mBinder;
int mStartMode;

 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
    mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    mCM.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() {

        @Override
        public void onPrimaryClipChanged() {
            String newClip = mCM.getText().toString();
            Toast.makeText(getApplicationContext(), newClip.toString(),  Toast.LENGTH_LONG).show();
            Log.i("LOG", newClip.toString() + "");


        }
    });
    return mStartMode;
 }


@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
  }
 }

在AndroidManifest中添加此服务:

 <service android:name=".Clipboard" />

在MainActivity启动服务

startService(new Intent(this, Clipboard.class));