Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android库项目中的ContentProvider大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对于许多不同应用程序使用的库项目,是否可以使用private(exported = falsE)ContentProvider?

问题是,即使未导出CP,它也必须具有唯一的权限.如果它不是唯一的,那么您无法在同一部手机上安装具有相同库的多个应用程序(INSTall_Failed_CONFLICTinG_PROVIDER).

我知道我可以使用应用程序ID在@L_825_1@manifest中定义提供程序,如下所示:

<provider
    android:authorities="${applicationID}.provider.test"
    android:name=".storage.db.MyContentProvider"
    android:exported="false" />

我找不到一个解决方案来在运行时生成代码中的权限来正确初始化UriMatcher.

BuildConfig.APPLICATION_ID返回库项目的ID,而不是应用程序.
我可以尝试从应用程序的上下文中获取packagEID,但如果应用程序使用具有不同appIds的flavor,那么它不是最佳解决方案.

所以我的想法是:

>在运行时在我的库代码中找到合适的appplicationId(当使用具有不同应用程序ID的flavor时)
>找到一种方法来正确匹配我的UriMatcher中的URI,而无需了解权限.

解决方法

根据找到的答案 here,我能够在运行时获得权限.解决方案如下所示(API 9)
private static String getAuthority(final Co@R_801_10443@t appCo@R_801_10443@t) throws PackageManager.NameNotFoundException {
  final ComponentName componentName = new ComponentName(appCo@R_801_10443@t,MyContentProvider.class.getName());
  final ProviderInfo providerInfo = appCo@R_801_10443@t.getPackageManager().getProviderInfo(componentName,0);
  return providerInfo.authority;
}

大佬总结

以上是大佬教程为你收集整理的android库项目中的ContentProvider全部内容,希望文章能够帮你解决android库项目中的ContentProvider所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。