【问题标题】:Catching text selection in another application在另一个应用程序中捕获文本选择
【发布时间】:2015-05-03 17:32:31
【问题描述】:

我想使用 android 制作一个小部件,我需要捕获任何文本选择事件。例如一个用户正在阅读某事。并在另一个应用程序(网络浏览器、pdf 阅读器、消息传递)中选择文本。

是否可以在后台捕获任何文本选择?

【问题讨论】:

  • 使用剪贴板是最好的方法,这里是Example
  • @kyur 你有没有发现任何方法可以在任何其他应用程序中检测 andorid 中的文本选择?我的意思是文本选择而不是文本复制。
  • 我也想要这个。不复制,只选择。这可能吗?
  • @Mr.Newman MahendraChhimwal 你找到什么方法了吗
  • 对于一些文章,我的意思是您只能在自己的应用程序中执行此操作(对上下文菜单进行一些修改),但在另一个应用程序中,为了安全起见,您不能这样做(一个应用程序对抗另一个应用程序) .因此,只有当文本被复制(到剪贴板)时,所有应用程序才能读取它。但不是选择

标签: android android-intent android-widget


【解决方案1】:

试试这个从剪贴板获取文本

     ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
     clipboard.getText();

Set text and get text from clipboard

【讨论】:

    【解决方案2】:

    示例代码:

    String textToPaste = null;
    
    ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
    
    /* Returns true if there is currently a primary clip on the clipboard. */
    
    if (clipboard.hasPrimaryClip()) {
        ClipData clip = clipboard.getPrimaryClip();
    
        // if you need text data only, then you have to check the MIME type for Text as i shown below :
        if (clip.getDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))
            // WARNING: The item could cantain URI that points to the text data.
            // In this case the getText() returns null and this code fails!
            textToPaste = clip.getItemAt(0).getText().toString();
    
        // or you may coerce the data to the text representation: i have explained this in the second image.
        textToPaste = clip.getItemAt(0).coerceToText(this).toString();
    }
    
    if (!TextUtils.isEmpty(textToPaste))
         ((TextView)findViewById(R.id.etInput1)).setText(textToPaste);
    

    更多信息,请查看官方链接

    http://developer.android.com/reference/android/content/ClipData.html

    http://developer.android.com/reference/android/content/ClipboardManager.html

    【讨论】:

    • 如何只捕捉选择?不复制
    【解决方案3】:

    1.你可以定义一个服务在后台监听剪贴板事件

     ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        clipboardManager.setPrimaryClip(new ClipboardManager.OnPrimaryClipChangedListener(){
            @Override
            public void onPrimaryClipChanged() {
                //TODO do your work
    
            }
        });
    

    2.或者您可以使用 AccessibilityService 检测复制文本事件,监听“TYPE_VIEW_TEXT_SELECTION_CHANGED”事件并从剪贴板读取数据,但您应该引导用户在系统设置中为您的应用启用辅助功能开关。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多