我的清单中有一个ContentProvider,当我使用硬编码字符串完全定义它时,它可以工作.例如
<provider android:name="com.myprovider" android:authorities="com.myprovider"/>
Run Code Online (Sandbox Code Playgroud)
工作完美,但ContentProviders在一个被多个项目使用的库中,我不想要权限冲突,所以我尝试执行以下操作.
<provider android:name="com.myprovider" android:authorities="@string/myProviderAuthority">
Run Code Online (Sandbox Code Playgroud)
这样我就可以在单个strings.xml文件中定义所有权限,并且应用程序之间没有冲突,因为我应该能够使用每个应用程序资源覆盖系统来更改它们.
但是,当我尝试使用@string进行构建时,它似乎给了我一个格式错误的清单错误,并说"提供商没有INCUDE(是的,它说INCUDE)当局致敬"
我是否可以不使用资源字符串为当局致敬,每次我需要在两个位置维护常量时我感到恶心.我们的质量保证部门很难抓住权威冲突,我不希望事情变得不同步或者可能引起混淆.任何人都有任何想法为什么我的代码不工作?
我有一个库项目,为许多需要相同数据库结构和功能的应用程序提供基本代码,我正在寻找实现它的最佳方法.我主要关心的是如何提供非静态权限,以便我可以使用使用该库的应用程序的包名称来覆盖它.
所以在库项目中我想我可以将以下常量更改为静态方法,这些方法将接受允许我从资源字符串或context.getPackageName方法获取权限的上下文
图书馆项目模型
public static final class Questions implements BaseColumns {
// public static final Uri CONTENT_URI =
// Uri.parse("content://" + Config.AUTHORITY + "/questions");
// use getAuthority instead which in turn will just get the package ae. Will this work?
public static Uri getContentUri(Context c){
return Uri.parse("content://" + getAuthority(c) + "/questions");
}
...
}
public static String getAuthority(Context c){
return c.getPackageName + ".QuizProvider";
}
Run Code Online (Sandbox Code Playgroud)
图书馆项目内容提供者
public class QuizProvider extends ContentProvider {
// private SQLiteDatabase mDB;
private static final String TAG …Run Code Online (Sandbox Code Playgroud)