android库项目中的ContentProvider

android库项目中的ContentProvider,第1张

概述对于许多不同应用程序使用的库项目,是否可以使用private(exported = false)ContentProvider? 问题是,即使未导出CP,它也必须具有唯一的权限.如果它不是唯一的,那么您无法在同一部手机上安装具有相同库的多个应用程序(INSTALL_FAILED_CONFLICTING_PROVIDER). 我知道我可以使用应用程序ID在AndroidManifest中定义提供程序 对于许多不同应用程序使用的库项目,是否可以使用private(exported = false)ContentProvIDer?

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

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

<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 Context appContext) throws PackageManager.nameNotFoundException {  final Componentname componentname = new Componentname(appContext,MyContentProvIDer.class.getname());  final ProvIDerInfo provIDerInfo = appContext.getPackageManager().getProvIDerInfo(componentname,0);  return provIDerInfo.authority;}
总结

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存