【问题标题】:How to listen for a copy in Android如何在 Android 中收听副本
【发布时间】:2014-10-28 07:39:37
【问题描述】:

为了让自己更熟悉 Android 中的内容提供程序,我正在制作一个小型剪贴板管理器应用。它的核心功能是简单地将您复制的任何内容添加到数据库中以显示。我对 Android 的剪贴板框架有些熟悉,但我不知道该怎么做就是监听复制“事件”以知道需要将新项目添加到剪贴板。

为了澄清,我需要能够在用户复制某些内容时向数据库添加一条记录。我该怎么做?

【问题讨论】:

  • 你是不是想提出一个不同的问题@Jack?您当前的链接似乎直接回到了这个问题。
  • 哈哈是的,我的意思是指向 Otra 发布的链接 :)

标签: java android


【解决方案1】:

如果您使用 API 级别 11 (3.0) 或更高版本,那么您可以使用 addPrimaryClipChangedListener 记录在案的 here 并且有一些示例用法 here

【讨论】:

  • 谢谢。对于较旧的 API,没有解决方案。
  • 没错,但如果你真的很想得到它,你可以试试下面的建议,然后每隔一段时间检查一下剪贴板(使用服务)。
  • 这个答案对面向 Android 10 (api 29) 的应用程序仍然有效吗?我有一个应用程序在过去几年一直使用这种方法来监听剪辑事件。一旦我升级到 api 29,它就停止了工作,似乎这可能与 Android 最近对前台服务的限制有关。想知道您对此是否有任何见解?
  • @jwenz723 当主应用程序不在焦点时,服务无法从剪贴板管理器中获取任何内容。这就是它在 Android Q (10) 上的工作方式。没有解决方法,因为这已被 Google 视为存在安全风险。澄清一下:当您的主应用失焦时,您甚至无法获取剪贴板中当前的任何内容。
【解决方案2】:

放入你的班级:

ClipboardManager.OnPrimaryClipChangedListener mPrimaryChangeListener = new ClipboardManager.OnPrimaryClipChangedListener() {
        public void onPrimaryClipChanged() {

            // this will be called whenever you copy something to the clipboard
        }
    };

把这个放在 onCreate 方法里面:

ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(mPrimaryChangeListener);

就是这样。希望对你有所帮助。

【讨论】:

    【解决方案3】:

    你有什么 API?这个答案:Listener for clipboard content change? 似乎暗示有一种适用于 android 3.0 及更高版本的方法,但不幸的是,不是更低。

    我唯一能想到的另一件事是提供服务,每隔一段时间查询剪贴板以查看它是否已更改或有新文本。这可以使用 ClipBoardManager 轻松完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多