我尝试在我的应用程序中添加一个即时应用程序功能,但当作为即时应用程序启动我的应用程序时,我得到了以下错误:
RuntimeException:无法获得提供者android.support.v4.content.FileProvider: java.lang.SecurityException: provider必须授予uri权限
下面是它在我的feature
声明中的用法:
<manifest>
<application>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>
</manifest>
我的即时应用程序build.gradle
:
apply plugin: 'com.android.instantapp'
android {
compileSdkVersion rootProject.compileSdk
defaultConfig {
applicationId "applicationId" // same than my app's APK module
minSdkVersion rootProject.minSdk
targetSdkVersion rootProject.compileSdk
versionCode rootProject.versionCode
versionName rootProject.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation project(':feature') // app's feature
}
怎么啦?谢谢你的帮助。
编辑:这是完整的logcat:
02-13 17:51:28.501 28992-28992/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: package, PID: 28992
java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must grant uri permissions
at android.app.ActivityThread.installProvider(ActivityThread.java:6206)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
Caused by: java.lang.SecurityException: Provider must grant uri permissions
at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:375)
at android.app.ActivityThread.installProvider(ActivityThread.java:6203)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
02-13 17:51:28.535 28932-28944/? E/Isotope: UID: [10188] PID: [28932] IActivityManagerProxy : Instant app: package crashed: java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must grant uri permissions
at android.app.ActivityThread.installProvider(ActivityThread.java:6206)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
Caused by: java.lang.SecurityException: Provider must grant uri permissions
at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:375)
at android.app.ActivityThread.installProvider(ActivityThread.java:6203)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
发布于 2018-02-14 23:13:22
看起来https://developer.android.com/training/secure-file-sharing/setup-sharing.html 在O上也不受支持,因为其他应用程序不允许查看它的ContentProvider。
我有一个测试应用程序,作为一个安装的应用程序,而不是作为一个https://developer.android.com/topic/instant-apps/faqs.html。看起来即时应用程序不允许使用grantUriPermission
(授予URI权限)(考虑到即时应用程序对安装的应用程序不可见且ContentProvider
不可见的策略,这是有意义的)。
这意味着即时应用程序不能检索使用ACTION_IMAGE_CAPTURE
拍摄的照片(因为它们不能读取外部存储,而相机应用程序不能写入即时应用程序的私有存储空间)。
发布于 2021-10-15 16:42:59
<provider
android:exported="false"
android:grantUriPermissions="true"
android:authorities="${applicationId}.fileprovider"
android:name="androidx.core.content.FileProvider">
<meta-data
android:resource="@xml/file_paths"
android:name="android.support.FILE_PROVIDER_PATHS"
/>
</provider>
https://stackoverflow.com/questions/48771566
复制相似问题