打开应用程序时如何阅读Android剪贴板(文本)?

斯派罗斯

我正在制作一个应用程序,最终我想在用户使用正则表达式打开我的应用程序以进行操作时检查剪贴板的内容。我目前正在尝试通过在Toast中显示数据来确保正确获取数据。

我在MainActivity的OnCreate函数上使用ClipboardManager,如官方文档和许多其他地方所述,尽管尝试访问剪贴板数据时出现空指针错误。

但是,如果我在尝试获取该数据之前设置了1-2秒的延迟(我将handler.postDelayed用于延迟的操作),则可以正确读取剪贴板的内容,这很奇怪。

为什么会发生这种情况?如何在打开应用程序时立即访问剪贴板的数据?

我使用的代码是:

ClipboardManager clipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);;
ClipData clipData = clipboardManager.getPrimaryClip();
ClipData.Item item = clipData.getItemAt(0);
String clipText = item.getText().toString();
Toast.makeText(getApplicationContext(), clipText, Toast.LENGTH_SHORT).show();

它在第三行崩溃,并显示以下错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ClipData$Item android.content.ClipData.getItemAt(int)' on a null object reference

谢谢

斯派罗斯

我发现的解决方案是运行onWindowFocusChanged()自Android 10起的访问剪贴板的代码,如@laalto所指出的,应用程序需要具有输入焦点才能访问剪贴板。

尽管这造成了另一个问题,因为我需要代码仅在应用程序启动时运行,而不是每次活动都具有焦点(活动更改,暂停应用程序并返回等)时运行。

我的解决方法是在类中创建一个静态布尔变量,然后将该变量onCreate()设为true,并设置if条件,onWindowFocusChanged()以仅在该变量为true时运行与剪贴板交互的代码。一旦访问完上的剪贴板onWindowFocusChanged(),便将该变量设置为false。

这样,代码仅在应用程序启动时运行,而不是每次MainActivity都具有焦点时运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从其他应用程序中获取所选文本并同时保留剪贴板文本

来自分类Dev

如何创建将文本复制到剪贴板的自定义应用程序启动器?

来自分类Dev

是否可以找出哪个应用程序将文本插入剪贴板?

来自分类Dev

如何在WinForms应用程序中创建自定义剪贴板格式

来自分类Dev

如何从Python中的任何应用程序捕获剪贴板事件(等效于onChangeClipboard)

来自分类Dev

如何创建一个像剪贴板Pro的应用程序的浮动窗口?

来自分类Dev

如何获取已更新剪贴板的应用程序的进程ID或名称?

来自分类Dev

如何检查哪个应用程序拥有剪贴板?

来自分类Dev

如何检查哪些应用程序可以访问我的剪贴板?

来自分类Dev

如何在WPF应用程序退出时禁用剪贴板清除功能?

来自分类Dev

TeamViewer远程计算机应用程序设置本地计算机剪贴板文本

来自分类Dev

如何检测剪贴板文本更改?

来自分类Dev

如何在Microsoft Office应用程序中获取剪贴板的当前文档路径?

来自分类Dev

打开应用程序时如何专注于文本字段?

来自分类Dev

如何在Go中将文本复制到剪贴板或从剪贴板复制文本?

来自分类Dev

LibreOffice与其他应用程序之间的剪贴板操作

来自分类Dev

从命令行应用程序访问Java FX剪贴板?

来自分类Dev

C#控制台应用程序中剪贴板的奇怪行为

来自分类Dev

MFC / COM:防止在应用程序关闭后清除剪贴板

来自分类Dev

LibreOffice与其他应用程序之间的剪贴板操作

来自分类Dev

在应用程序外部使用Qt的剪贴板快捷方式/热键绑定

来自分类Dev

在Ubuntu Linux中:将剪贴板内容作为参数传递给某些应用程序

来自分类Dev

应用程序以无格式/十六进制格式查看OSX上的剪贴板内容

来自分类Dev

可以显示剪贴板内容及其MIME类型的应用程序吗?

来自分类Dev

应用程序之间的剪贴板不一致

来自分类Dev

在C#WinForm应用程序中切换监视剪贴板

来自分类Dev

从剪贴板读取文本

来自分类Dev

通过系统启动器调用第三方应用程序以将文本设置为剪贴板

来自分类Dev

如何将文本从程序“屏幕”复制到剪贴板?

Related 相关文章

  1. 1

    如何从其他应用程序中获取所选文本并同时保留剪贴板文本

  2. 2

    如何创建将文本复制到剪贴板的自定义应用程序启动器?

  3. 3

    是否可以找出哪个应用程序将文本插入剪贴板?

  4. 4

    如何在WinForms应用程序中创建自定义剪贴板格式

  5. 5

    如何从Python中的任何应用程序捕获剪贴板事件(等效于onChangeClipboard)

  6. 6

    如何创建一个像剪贴板Pro的应用程序的浮动窗口?

  7. 7

    如何获取已更新剪贴板的应用程序的进程ID或名称?

  8. 8

    如何检查哪个应用程序拥有剪贴板?

  9. 9

    如何检查哪些应用程序可以访问我的剪贴板?

  10. 10

    如何在WPF应用程序退出时禁用剪贴板清除功能?

  11. 11

    TeamViewer远程计算机应用程序设置本地计算机剪贴板文本

  12. 12

    如何检测剪贴板文本更改?

  13. 13

    如何在Microsoft Office应用程序中获取剪贴板的当前文档路径?

  14. 14

    打开应用程序时如何专注于文本字段?

  15. 15

    如何在Go中将文本复制到剪贴板或从剪贴板复制文本?

  16. 16

    LibreOffice与其他应用程序之间的剪贴板操作

  17. 17

    从命令行应用程序访问Java FX剪贴板?

  18. 18

    C#控制台应用程序中剪贴板的奇怪行为

  19. 19

    MFC / COM:防止在应用程序关闭后清除剪贴板

  20. 20

    LibreOffice与其他应用程序之间的剪贴板操作

  21. 21

    在应用程序外部使用Qt的剪贴板快捷方式/热键绑定

  22. 22

    在Ubuntu Linux中:将剪贴板内容作为参数传递给某些应用程序

  23. 23

    应用程序以无格式/十六进制格式查看OSX上的剪贴板内容

  24. 24

    可以显示剪贴板内容及其MIME类型的应用程序吗?

  25. 25

    应用程序之间的剪贴板不一致

  26. 26

    在C#WinForm应用程序中切换监视剪贴板

  27. 27

    从剪贴板读取文本

  28. 28

    通过系统启动器调用第三方应用程序以将文本设置为剪贴板

  29. 29

    如何将文本从程序“屏幕”复制到剪贴板?

热门标签

归档