服务 - android剪贴板监听器

时间:2013-11-13 20:35:00

标签: android clipboardmanager

我需要一个简单的服务(将在后台运行),当用户从浏览器或短信等中复制任何内容时,会有一个显示该文本的吐司。

例如: enter image description here

此服务必须在Android 2.1及更高版本上运行。

今天(从上午10:35到现在[晚上11:11])我一直在网上搜索并测试了几个代码,但到目前为止我还没有得出结论。

有些用户在回答此类问题时建议使用(my-clips)项目。我明白了,you can download this。 但是这个项目很复杂,我很困惑。

有人能告诉我一个非常简单的例子吗? 谢谢


修改

这是在后台和其他操作系统上运行的简单app。当用户未打开此应用并从浏览器或短信等中复制任何文本时,此应用将处于有效状态并显示toast,如下所示:You copy this: ...

3 个答案:

答案 0 :(得分:10)

我这样做的方式是:

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

以这种方式进行,无需服务,添加到清单或任何内容,只需先打开您的应用然后关闭它,然后从任何地方复制文本以复制并显示在您的应用中

答案 1 :(得分:1)

对于android中的监视器剪贴板,你需要一个监视剪贴板的服务,这个服务应该在manifest中定义。 你的剪贴板服务在这里

https://github.com/twaddington/Android-Clipboard-Monitor/blob/master/src/com/example/clipboardmonitor/service/ClipboardMonitorService.java

和manifest定义在下面

<service
        android:name=".service.ClipboardMonitorService"
        android:label="Clipboard Monitor"
        android:exported="false"/>

答案 2 :(得分:-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));