Android:如何在其他应用程序的任何文本区域中监听 longclick 事件?

Posted

技术标签:

【中文标题】Android:如何在其他应用程序的任何文本区域中监听 longclick 事件?【英文标题】:Android : How to listen to longclick events in any text area in other applications? 【发布时间】:2011-08-22 02:52:47 【问题描述】:

我正在尝试开发一个在将数据粘贴到任何地方时提供额外选项的 android 应用程序。

我知道如何从剪贴板捕获数据。我只需要知道如何在其他应用程序(例如浏览器、facebook、twitter 等)的任何文本区域中收听 longclick 事件,以便触发我的应用程序,让用户可以选择在处理后将数据粘贴到剪贴板上它,作为以正常方式粘贴它的替代方法。

【问题讨论】:

嗯,我很确定这需要修改操作系统,我认为剪贴板管理器不能像 SMS 等的意图那样被替换。 虽然 dylantaylor.wordpress.com/clippy 声称它有一项服务可以监控剪贴板的更改,但您也可以这样做并发布一个获取剪贴板内容的通知。 【参考方案1】:

自从您提出这个问题以来,我们已经走了很长一段路,但实际上有两种方法可以做到这一点:

    调用ClipboardManager.addPrimaryClipChangedListener() 并在用户复制文本时注册为监听器。可以在Documentation

    找到

    添加ACTION_PROCESS_TEXT Intent 过滤器,以便用户可以选择您创建/启动应用程序的自定义操作。更多可以在Blog Post

    中找到

【讨论】:

【参考方案2】:

您需要为相关活动添加一个意图过滤器,如下所示:

        <activity android:name=".PostActivity">
            <intent-filter>
              <action android:name="android.intent.action.SEND" />
              <category android:name="android.intent.category.DEFAULT" />
              <data android:mimeType="text/plain" />
            </intent-filter>       
        </activity>

那么你只需要在你的Activity中处理intent中发送给你的数据

Uri data = getIntent().getData();
Bundle extras = getIntent().getExtras();
String messageText = "";
if (data != null) 
  messageText = data.toString();
 else if (extras != null) 
  messageText = extras.getString(Intent.EXTRA_TEXT);

【讨论】:

以上是关于Android:如何在其他应用程序的任何文本区域中监听 longclick 事件?的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用 (Cordova) 上的文本区域中的字数超出限制

如何使用 AngularJs 从输入或文本区域中删除特殊字符?

禁用 HTML 文本区域中的换行符

Java:如何更改文本区域中特定行或字符串行的颜色?

文本区域中的字体一致性

如何在引导程序 2.3.2 中对齐文本区域中的文本