在 Android 上使用 ClipData 的 JavaSecurityException
Posted
技术标签:
【中文标题】在 Android 上使用 ClipData 的 JavaSecurityException【英文标题】:JavaSecurityException using ClipData on Android 【发布时间】:2018-12-13 23:18:48 【问题描述】:我正在尝试在 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)
【问题讨论】:
【参考方案1】:这个问题对我的项目是固定的,但对于所有想知道的人来说,这就是我的解决方法。
首先我弄清楚了这个错误是什么时候发生的。那是当我在剪贴板中没有任何文本并且我的应用程序尝试转到外部存储并引发错误时。
然后为了解决这个问题,我只需更改我的方法以验证剪贴板中有文本。
原来是这样的:
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的主要内容,如果未能解决你的问题,请参考以下文章
android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/picFolder/1.jpg 通过 ClipData.
通过 ClipData.Item.getUri 暴露在应用程序之外
android.os.FileUriExposedException:file:///storage/emulated/0/Pictures/picFolder/1.jpg通过ClipData.Ite
exposed beyond app through ClipData.Item.getUri()
android 7.0拍照问题file:///storage/emulated/0/photo.jpeg exposed beyond app through ClipData.Item.getUri