【问题标题】:Module with ContentProvider带有 ContentProvider 的模块
【发布时间】:2016-06-01 08:35:25
【问题描述】:
我正在使用this 库,问题开始于:
托盘基于 ContentProvider。 ContentProvider 需要一个唯一的
权威。当您对多个应用程序使用相同的权限时,您将
由于权限冲突而无法安装应用程序
错误信息:
失败 [INSTALL_FAILED_CONFLICTING_PROVIDER]
因为之前没读过这个,所以我用这个库来解决多线程SharedPreference的问题,这个项目必须变成一个模块才能在多个项目中使用。
在使用此模块安装每个应用时,抛出 Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] 异常。
因为 authority 已在第一个安装的应用中使用。
问题是:
【问题讨论】:
标签:
android
module
android-contentprovider
【解决方案1】:
已修复
对于那些需要类似的东西,这些是要遵循的步骤:
第 1 步。 我在 主项目 中配置了“其他应用程序所需”的托盘库
(托管数据库首选项的应用)
第 2 步。我从存储库中提取了与 Tray ContentProvider 连接所需的类,它们是:
- AbstractTrayPreference.java
- ContentProviderStorage.java
- ItemNotFoundException.java
- Migration.java
- OnTrayPreferenceChangeListener.java
- PreferenceAccessor.java
- Preferences.java
- PreferenceStorage.java
- SqliteHelper.java
- TrayContract.java
- TrayDBHelper.java
- TrayException.java
- TrayItem.java
- TrayPreferences.java
- TrayProviderHelper.java
- TrayRuntimeException.java
- TrayStorage.java
- TrayUri.java
- WrongTypeException.java
在通用模块的新包中。
第 3 步。我通过常量变量硬编码权限名称:
这必须与主项目配置相匹配:
// bild.gradle of Main Project
resValue "string", "tray__authority", "<your.app.package>.tray"
// TrayContract.java of Module
@NonNull
private static String getAuthority(@NonNull final Context context) {
return TextUtils.isEmpty(sTestAuthority) ?
AppConstant.TRAY_AUTHORITY: // <-- this one = <your.app.package>.tray
sTestAuthority;
}
终于可以正常使用类了:
// etc
import <your.app.package>.tray.TrayPreferences;
// etc
public class AppPreferencesManager extends TrayPreferences {
// etc
}
成功了:)