解决 SecurityException: Permission Denial: opening provider问题

阅读: 评论:0

解决 SecurityException: Permission Denial: opening provider问题

解决 SecurityException: Permission Denial: opening provider问题

在练习内容提供器(ContentProvider)时,遇到问题报错信息:

03-31 23:59:55.637    2273-2273/st.providertest E/AndroidRuntime﹕ FATAL EXCEPTION: mainjava.lang.SecurityException: Permission Denial: opening provider st.databasetest.DatabaseProvider from ProcessRecord{5372b968 2273:st.providertest/u0a10058} (pid=2273, uid=10058) that is not exported from uid 10056at android.adException(Parcel.java:1425)at android.adException(Parcel.java:1379)at android.ContentProvider(ActivityManagerNative.java:2545)at android.app.ActivityThread.acquireProvider(ActivityThread.java:4462)at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:1995)t.ContentResolver.acquireProvider(ContentResolver.java:1054)t.ContentResolver.insert(ContentResolver.java:860)at st.Click(MainActivity.java:72)at android.view.View.performClick(View.java:4204)at android.view.View$PerformClick.run(View.java:17355)at android.os.Handler.handleCallback(Handler.java:725)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5041)at flect.Method.invokeNative(Native Method)at flect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)at dalvik.system.NativeStart.main(Native Method)

**

解决方案:

**
在provider中添加如下属性值 android:exported=”true”

<provider>
android:authorities="st.databasetest.provider"
android:name="st.databasetest.DatabaseProvider"
android:exported="true">
</provider>

查询provider的API说明,官方说明如下:

android:exported
Whether the content provider is available for other applications to use:
true: The provider is available to other applications. Any application can use the provider's content URI to access it, subject to the permissions specified for the provider.
false: The provider is not available to other applications. Set android:exported="false" to limit access to the provider to your applications. Only applications that have the same user ID (UID) as the provider will have access to it.
The default value is "true" for applications that set either android:minSdkVersion orandroid:targetSdkVersion to "16" or lower. For applications that set either of these attributes to"17" or higher, the default is "false".You can set android:exported="false" and still limit access to your provider by setting permissions with the permission attribute.

在API 16 或者更低的版本中,该属性默认值为true,在17及更高的版本中默认值是false。我的练习中使用的API是21版本,因此如果不指定该属性的值,则默认false,其他应用程序则无法使用该内容提供器,只要在内容提供应用中,指定android:exported=“true”,就可以解决问题。

本文发布于:2024-01-31 13:30:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667905128879.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23