使用跨不同应用程序的按钮从剪贴板粘贴文本 (Android)

Pasting text from clipboard using a button across different apps (Android)

我试图在网上找到类似的东西,但找不到。具体来说,我想要的是能够让按钮粘贴一些源自其他应用程序而不是我正在制作的应用程序的文本。因此,假设您从 "Google Chrome" 应用程序复制了一些文本,然后进行了常规的长按和复制。然后,您打开这个应用程序并按下一个按钮,它会从剪贴板中获取文本并将其粘贴到 TextView 中。我知道这对于剪贴板管理器是不可能的,因为我看到的所有示例都将其显示为一个对象,用于存储应用程序中的信息。

我想你想要实现的在这个开源库中是可用的:https://github.com/heruoxin/Clip-Stack

想法是它在自己的内部数据库中跟踪剪贴板条目,同时 运行 一个(在您的情况下是浮动按钮)服务,然后粘贴它。

不,ClipboardManager 是一项系统服务,提供对设备范围剪贴板的访问。

许多示例可能同时显示复制和粘贴到剪贴板的部分原因是示例是独立的。

因此,您从 getSystemService() 获得 ClipboardManager,通过 getPrimaryClip() 获得当前内容,并根据需要使用 ClipData

例如,this sample project 包含两个应用程序:drag/drop/。这主要是为了说明 Android 7.0 上的跨应用拖放操作。但是,drop/ 支持 "Paste" 操作栏项目(具有关联的键盘快捷键),我可以在其中抓取剪贴板上的任何内容,如果它有 Uri,则使用它:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId()==R.id.paste) {
      boolean handled=false;

      ClipData clip=
        getSystemService(ClipboardManager.class)
          .getPrimaryClip();

      if (clip!=null) {
        ClipData.Item clipItem=clip.getItemAt(0);

        if (clipItem!=null) {
          imageUri=clipItem.getUri();

          if (imageUri!=null) {
            showThumbnail();
            handled=true;
          }
        }
      }

      if (!handled) {
        Toast
          .makeText(this, "Could not paste an image!", Toast.LENGTH_LONG)
          .show();
      }

      return(handled);
    }

    return(super.onOptionsItemSelected(item));
  }

此应用程序中没有用于将内容放入剪贴板的代码,但关联的 drag/ 应用程序有相关代码。