我有一个应用程序,想要将文件发送到其他已安装的应用程序。我正在使用FileProvider来完成这个操作。在4.2版本中运行良好,但在2.3版本的手机上出现了问题。以下是我的提供程序。
请帮我翻译一下这个内容。 编辑1: 我试图通过形成uri:
这是Drive应用程序崩溃的原因:
感谢您,Boopathy。
<provider
android:name="com.example.sample.FileProvider"
android:authorities="com.example.sample.provider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
我在stackoverflow上提出了一些建议,可以通过设置exported="true"来解决问题。但是如果这样做,FileProvider不允许附加provider。
当其他应用程序访问Uri
时,应用程序会崩溃,并显示以下消息。
java.lang.SecurityException: Permission Denial: opening provider com.example.sample.FileProvider from ProcessRecord{4079bd68 5637:com.google.android.apps.docs/10060} (pid=5637, uid=10060) requires null or null
Intent
的作用是:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
请帮我翻译一下这个内容。 编辑1: 我试图通过形成uri:
content://com.example.sample.provider/my_docs/sample.txt
将文本文件发送到Google Drive应用程序。这是Drive应用程序崩溃的原因:
E/AndroidRuntime( 6502): Caused by: java.lang.SecurityException: Permission Denial: opening provider com.example.sample.FileProvider from ProcessRecord{406e05a8 6502:com.google.android.apps.docs/10060} (pid=6502, uid=10060) requires null or null
E/AndroidRuntime( 6502): at android.os.Parcel.readException(Parcel.java:1322)
E/AndroidRuntime( 6502): at android.os.Parcel.readException(Parcel.java:1276)
E/AndroidRuntime( 6502): at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:1882)
E/AndroidRuntime( 6502): at android.app.ActivityThread.getProvider(ActivityThread.java:3499)
E/AndroidRuntime( 6502): at android.app.ActivityThread.acquireProvider(ActivityThread.java:3524)
E/AndroidRuntime( 6502): at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:1712)
E/AndroidRuntime( 6502): at android.content.ContentResolver.acquireProvider(ContentResolver.java:757)
E/AndroidRuntime( 6502): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:488)
E/AndroidRuntime( 6502): at android.content.ContentResolver.openInputStream(ContentResolver.java:328)
E/AndroidRuntime( 6502): at rL.a(UriDataSource.java:40)
E/AndroidRuntime( 6502): at rE.a(ItemToUpload.java:267)
E/AndroidRuntime( 6502): at aDW.a(ExtraStreamDataSource.java:125)
E/AndroidRuntime( 6502): at com.google.android.apps.docs.shareitem.UploadSharedItemActivityDelegate.a(UploadSharedItemActivityDelegate.java:109)
E/AndroidRuntime( 6502): at aEk.a(UploadSharedItemActivityDelegate.java:811)
E/AndroidRuntime( 6502): at aEk.doInBackground(UploadSharedItemActivityDelegate.java:791)
E/AndroidRuntime( 6502): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime( 6502): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
E/AndroidRuntime( 6502): ... 4 more
感谢您,Boopathy。