我有一个正在使用ActiveAndroid的应用程序,并且运行良好。然而;现在,当我尝试将模型保存到数据库时,出现了SecurityException。
堆栈是:
Error saving model java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
at android.os.Parcel.readException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1888)
at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:801)
at android.content.ContentResolver.notifyChange(ContentResolver.java:2046)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1997)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1967)
at com.activeandroid.Model.save(Model.java:162)
[.... local stack removed]
还有其他人经历过吗?我们是否需要在AndroidManifest.xml中指定内容提供者?
抱歉,我还没有一个孤立的例子。我会努力把一些东西放在一起。
提前致谢
最佳答案
正如@GeigerGeek所指出的那样,Android 26及更高版本上的安全性更改要求您在 list 中指定内容提供者。
对于ActiveAndroid,您可以将以下内容添加到 list 中,并更改软件包名称。
<provider
android:name="com.activeandroid.content.ContentProvider"
android:authorities="<your.package.name>"
android:enabled="true"
android:exported="false">
</provider>
如果在构建过程中使用口味,则可以改用以下方式:
android:authorities="${applicationId}"
使用
${applicationId}
将有助于基于 flavor 的项目结构,其中每种 flavor 的应用程序包可能不同。对于更多的解决方案或信息,这是from here.