我有一个需要文件提供程序的库,为了防止与实现应用程序的 FileProvider 发生冲突,我使用了此处提到的方法。尽管库在构建和示例应用程序中测试的库没有问题,但它会引发以下异常。
注意:尽管有例外,我可以使用共享意图将内容共享给其他应用程序。我不知道为什么在仍然共享文件而没有任何崩溃的情况下发生异常。
例外:
E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.library.package.reporter.FilesProvider uri content://com.library.package.sample.com.library.package.provider.fileprovider/./reports/2020-03-28%2022%3A42%3A50_report.txt from pid=3158, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:729)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:602)
at android.content.ContentProvider$Transport.query(ContentProvider.java:231)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:104)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
显现:
<provider
android:name=".reporter.FilesProvider"
android:authorities="${applicationId}.com.library.package.provider.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
文件提供者用法:
Uri uri = FilesProvider.getUriForFile(getApplicationContext(), getPackageName() + ".com.library.package.provider.fileprovider", new File(filePath));
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TEXT, content);
intent.putExtra(Intent.EXTRA_STREAM, uri);
context.startActivity(Intent.createChooser(intent, context.getString(R.string.intent_share_title)));
我应该忽略崩溃并继续前进还是我做错了什么?