在具有Android 10的三星设备上,我们遇到问题,在启动ChooserActivity以共享由我们的应用程序创建的图像之后,我们的应用程序已关闭。
日志中没有任何异常。对于用户来说,我们的应用程序似乎已关闭。
我们在其他设备上看不到此行为。
但是在装有Android 10的诺基亚测试设备上,logcat中有一个条目。
2020-05-06 15:48:04.033 4509-4543/packagename E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://packagename.provider/cache/image-to-share.jpeg from pid=2753, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:742)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:615)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:606)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:520)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:307)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
跟随警告
2020-05-06 15:48:04.034 2753-5090/? W/ChooserActivity: Could not load (content://packagename.provider/cache/image-to-share.jpeg) thumbnail/name for preview. If desired, consider using Intent#createChooser to launch the ChooserActivity, and set your Intent's clipData and flags in accordance with that method's documentation
我不知道这是否可能是三星设备完全使用我们的应用程序的原因。在我们的测试设备上,即使此消息出现在日志中,也可以正常工作。
这是我们如何启动ChooserActivity的代码
val share = Intent(Intent.ACTION_SEND)
share.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
share.type = "*/*"
share.putExtra(Intent.EXTRA_TEXT, link)
share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(activity!!, BuildConfig.APPLICATION_ID + ".provider", fileToShare!!))
startActivityForResult(Intent.createChooser(share, "Share Image"), REQUEST_CODE_CHOOSER_INTENT)
这里是AndroidManifest.xml
中我们的文件提供者的定义>
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
[
file_paths.xml
看起来像这样
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <cache-path name="cache" path="."/> </paths>
有人在三星设备上也有此问题,或者可以告诉我如何解决在日志中看到的错误,以便我们可以测试是否可以解决三星设备上的问题?
在具有Android 10的三星设备上,我们遇到了问题,启动ChooserActivity共享我们的应用创建的图像后,我们的应用已关闭。日志或其他任何内容都没有例外。 ...
如错误所述,在AndroidManifest.xml文件的提供程序组件中,使文件提供程序可导出,]
android:exported="true"