我有一个正在使用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.

10-08 18:39