服务 - android剪贴板监听器

use*_*452 14 android clipboardmanager

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

例: 在此输入图像描述

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

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

一些用户在回答这样的问题时建议使用(my-clips)项目.我明白了,你可以下载这个.但这个项目很复杂,我很困惑.

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


编辑:

这是在背景和其他操作系统上运行的简单应用程序.当用户没有打开此应用程序并从浏览器或短信等复制任何文本时,此应用程序将处于活动状态并显示toast如下:You copy this: ...

Car*_*les 15

我这样做的方式是:

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();
                }
            });
Run Code Online (Sandbox Code Playgroud)

这样做没有服务,添加到清单或任何东西,只需先打开你的应用程序然后关闭它,然后从任何地方复制文本复制并显示在你的应用程序中

  • 该解决方案不满足以下要求:`这是在后台和操作系统上运行的简单应用程序。当用户未打开此应用程序并从浏览器或短信等复制任何文本时,此应用程序将处于活动状态并显示如下所示的吐司:您复制此:...` (2认同)

Mah*_*bar 5

对于Android中的Monitor Clipboard,您需要一个用于监视剪贴板的服务,并且该服务应在清单中定义。您的剪贴板服务在这里

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

和清单定义在下面

<service
        android:name=".service.ClipboardMonitorService"
        android:label="Clipboard Monitor"
        android:exported="false"/>
Run Code Online (Sandbox Code Playgroud)


小智 -5

这对我有用。

一、广播:

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        ComponentName service = context.startService(
                new Intent(context, ClipboardMonitor.class));
        if (service == null) {
            Log.e("TAG", "Can't start service");
        }
    } else {
        Log.e("TAG", "Recieved unexpected intent " + intent.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是服务

private MonitorTask mTask = new MonitorTask();
private ClipboardManager mCM;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    mTask.start();
}


@Override
public void onDestroy() {
    mTask.cancel();
}

@Override
public void onStart(Intent intent, int startId) {
}

/**
 * Monitor task: monitor new text clips in global system clipboard and
 * new image clips in browser download directory
 */
private class MonitorTask extends Thread {

    private volatile boolean mKeepRunning = false;
    private String mOldClip = null;


    public MonitorTask() {
        super("ClipboardMonitor");
    }

    /** Cancel task */
    public void cancel() {
        mKeepRunning = false;
        interrupt();
    }

    @Override
    public void run() {
        mKeepRunning = true;

        while (true) {
            doTask();

            if (!mKeepRunning) {
                break;
            }
        }

    }

    private void doTask() {
        if (mCM.hasText()) {
            String newClip = mCM.getText().toString();
            if (!newClip.equals(mOldClip)) {

                mOldClip = newClip;
               // Toast.makeText(getApplicationContext(), "" +  newClip.toString(), Toast.LENGTH_SHORT).show();
                Log.i("TAG", "new text clip inserted: " + newClip.toString());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

另外,权限:

<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" />

<service android:name=".ClipboardMonitor" />
<receiver android:name=".ClipboardMonitorStarter">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

  • 那些“X_CLIPS”权限是无稽之谈,它们在 Android 中不存在。 (6认同)