相关疑难解决方法(0)

使用@string for android:在ContentProvider中使用权限

我的清单中有一个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)当局致敬"

我是否可以不使用资源字符串为当局致敬,每次我需要在两个位置维护常量时我感到恶心.我们的质量保证部门很难抓住权威冲突,我不希望事情变得不同步或者可能引起混淆.任何人都有任何想法为什么我的代码不工作?

android android-contentprovider

18
推荐指数
2
解决办法
5529
查看次数

Android,图书馆项目中的内容提供商

我有一个库项目,为许多需要相同数据库结构和功能的应用程序提供基本代码,我正在寻找实现它的最佳方法.我主要关心的是如何提供非静态权限,以便我可以使用使用该库的应用程序的包名称来覆盖它.

所以在库项目中我想我可以将以下常量更改为静态方法,这些方法将接受允许我从资源字符串或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)

android android-contentprovider

9
推荐指数
1
解决办法
5510
查看次数

标签 统计

android ×2

android-contentprovider ×2