我正在开发一组仅在某些品牌中有所区别的应用程序(想想不同的运动队); 但是,我遇到了一个问题,我正在为所有特定品牌的应用程序使用一个Library项目,并希望为所有这些应用程序使用相同的ContentProvider.当我创建ContentProvider时,我将AUTHORITY声明为类中的常量(根据dev示例代码),并且我在清单文件中的每个特定应用程序中使用相同的权限.看起来我不能在每个应用程序中使用相同的权限,因为我在尝试安装第二个应用程序时遇到此错误(我安装一个品牌的应用程序,但第二个安装):
WARN/PackageManager(66): Can't install because provider name com.xxx.Provider (in package com.xxx) is already used by com.zzz
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,但似乎没有一种方法可行.我还没有完成的一个想法是创建一个库jar,只省略我拥有的Provider类,并在每个特定的应用程序中自定义它.关于如何解决这个问题而不诉诸于此的任何想法?
我有两个使用相同内容提供程序的应用程序,但我不能在两个应用程序中放置相同的内容提供程序 - 它显示INSTALL_FAILED_CONFLICTING_PROVIDER错误.所以我把我的内容提供商放在第三个.apk中,并从两个应用程序中使用它,它运行良好.
现在问题是 - 必须先安装内容提供程序apk,然后才能在设备上安装这两个应用程序中的任何一个.否则,它会在安装期间显示Provider not found错误.
那么,在安装任何其他apks之前,如何确保安装提供程序apk?
有没有办法将内容提供程序apk与其他两个apks单独合并,因此它们将作为两个应用程序一起安装,并且不会显示INSTALL_FAILED_CONFLICTING_PROVIDER错误?
我需要将内容提供程序apk与两个应用程序合并,因为用户可能无法安装这两个应用程序,也可能将它们安装在单个设备上.
我有一个库项目,为许多需要相同数据库结构和功能的应用程序提供基本代码,我正在寻找实现它的最佳方法.我主要关心的是如何提供非静态权限,以便我可以使用使用该库的应用程序的包名称来覆盖它.
所以在库项目中我想我可以将以下常量更改为静态方法,这些方法将接受允许我从资源字符串或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) 我们正在尝试发布一款免费广告的付费广告版本,该应用目前免费发布广告.我们重构了所有包名com.mycompanyname.appname.pro,基本上市场上的免费包没有.pro.我们也进入了内容提供商,并将权限更改为与包名相同.所以"免费版"有
AUTHORITY = "com.mycompanyname.appname"
Run Code Online (Sandbox Code Playgroud)
并且"无广告付费版本有
AUTHORITY = "com.mycompanyname.appname.pro"
Run Code Online (Sandbox Code Playgroud)
但是我们仍然无法在同一设备上同时安装免费版和"专业版".无论它的价值如何,提供商的类名在两个应用程序中都是相同的.
我们无法直接从apk安装,如果我们尝试从Android市场下载,我们会收到"重复的提供商权限"错误消息.
我们缺少什么?还有另一个地方我们需要寻找问题,还是我们在这里遇到了根本错误的问题?