Android 开发:如何在 Android 11 上监听 APP 之外的剪贴板变化?

Android development: How to listen to clipboard changes outside of an APP on Android 11?

我有一个主要为 Android 9 开发的个人应用程序,它监听剪贴板更改并在我复制 URL 的任何地方提示 window。实现如下:

ClipboardManager.OnPrimaryClipChangedListener listener = () -> {
    Log.d("APP", "Detected clipboard change.");

    if (manager.hasPrimaryClip() && manager.getPrimaryClip().getItemCount() > 0) {

        CharSequence addedText = manager.getPrimaryClip().getItemAt(0).getText();

        if (addedText != null) {
            Log.d("APP", "copied text: " + addedText);
            if ( addedText.toString().startsWith("http") ) {

                Date dNow = new Date( );
                SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss");

                AlertDialog newDialog = new AlertDialog.Builder(MainActivity.this)
                        .setMessage("Detected link, deal with it?")
                        .setPositiveButton("OK", (dialog, which) -> {
                            Intent it = new Intent(Intent.ACTION_SEND);
                            it.putExtra(Intent.EXTRA_TEXT, addedText);
                            it.setClass(MainActivity.this, MainActivity.class);
                            startActivity(it);

                            finish();
                        })
                        .setNegativeButton("No", null)
                        .setCancelable(true)
                        .create();
                newDialog.getWindow().setType(
                        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
                newDialog.getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_DIM_BEHIND);
                newDialog.show();
            }
        }
    }
};

manager.addPrimaryClipChangedListener(listener);

这个功能在Android 9 下很好用,每当我在其他应用程序中复制一个URL。但是在Android11环境下同样的策略只响应APP内部的复制URL。在 Bing 上搜索后,我似乎没有发现有关剪贴板的任何 API 更改,但我知道 Android 11 增强了安全性和隐私性,例如,不允许获取我的 IMEI 号码手机。这是否说明我的应用程序在 Android 11 上无法检测应用程序外部的剪贴板更改。解决方法是什么?这是一个仅供个人使用并由我控制的APP。我对失去这些小小的便利感到越来越沮丧。

Does that account for failure of my APP on Android 11 to detect clipboard changes outside the APP

The change came in Android 10:“除非您的应用是默认输入法编辑器 (IME) 或者是当前具有焦点的应用,否则您的应用无法在 Android 10 或更高版本上访问剪贴板数据。”

What's the workaround?

也许可以实现您自己的 IME。