在 Android 上使用 ClipData 时出现 JavaSecurityException

标签 java android clipboard clipboardmanager

我正在尝试在 Android 上使用 ClipData 粘贴文本。以下代码给出了java.lang.SecurityException。这种情况并不总是发生。我应该声明任何读取剪贴板的使用权限吗?

java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2750)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2811)
at android.app.ActivityThread.-wrap12 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1528)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6316)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762)
Caused by: java.lang.SecurityException:
at android.os.Parcel.readException (Parcel.java:1683)
at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel (DatabaseUtils.java:146)
at android.content.ContentProviderProxy.openTypedAssetFile (ContentProviderNative.java:692)
at android.content.ContentResolver.openTypedAssetFileDescriptor (ContentResolver.java:1163)
at android.content.ContentResolver.openTypedAssetFileDescriptor (ContentResolver.java:1107)
at android.content.ClipData$Item.coerceToText (ClipData.java:332)
at br.com.sicoob.camera.clipboard.ClipboardInterface.getText (ClipboardInterface.java:35)
at br.com.sicoobnet.InicioWap.verificarExisteBoletoCopiado (InicioWap.java:312)
at br.com.sicoobnet.InicioWap.verificarAcao (InicioWap.java:308)
at br.com.sicoobnet.InicioWap.onCreate (InicioWap.java:126)
at android.app.Activity.performCreate (Activity.java:6757)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2703)

最佳答案

这个问题已在我的项目中解决,但对于每个想知道的人来说,这就是我解决的方法。

首先我弄清楚了这个错误何时发生。当时我的剪贴板中没有任何文本,并且我的应用程序尝试访问外部存储并引发了错误。

然后为了解决这个问题,我只需更改方法来验证剪贴板内是否有文本。

事情是这样的:

ClipboardManager clipboard = getManager(context);
ClipData clip = clipboard.getPrimaryClip();
return clip != null && clip.getItemCount() > 0;

然后就是这样的:

ClipboardManager clipboard = getManager(context);
clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);

关于在 Android 上使用 ClipData 时出现 JavaSecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191906/

相关文章:

android - 偏好 Activity 与偏好 fragment ?

android - flutter google_sign_in 在没有 firebase 的情况下获取 id token

python - 如果 x 相同,如何不打印?

java - 使用 TLSv1 甚至协议(protocol)配置为 SSL_TLSv2 的应用程序

java - Spring 框架中的 Localhost 与 127.0.0.1

java - CSS:将文本附加到输入文本的值中

ios - 将粘贴文本复制到 iOS 模拟器

java - java中根据特定顺序对列表进行排序

android - Github 双作者 一个开发者

c++ - 使用 C++ 和 Qt 链接到网络驱动器