我想知道是否有办法知道我的应用程序是由供应商预装的(而不是从Android Market安装)。应用程序也可以在Android Market中使用,并可以从那里更新。
一种解决方案是在本地文件系统中创建一个文件(我们可以为供应商构建一个特殊的应用程序版本)。但是有一种情况是应用程序可以在首次运行之前从市场更新,并且不会创建文件。
还有其他方法吗?可能是安装路径?
同样有趣的是,Android Market应用程序是否会自动检查此预装应用程序的更新,就像它为Google地图执行的一样。
答案 0 :(得分:5)
您必须获取包的ApplicationInfo(使用PackageManager),然后检查其标志。
import android.content.pm.ApplicationInfo;
if ((ApplicationInfo.FLAG_SYSTEM & myApplicationInfo.flags) != 0)
// It is a pre embedded application on the device.
答案 1 :(得分:3)
有关更完整的示例,可以使用此:
private String getAllPreInstalledApplications() {
String allPreInstalledApplications = "";
PackageManager pm = getPackageManager();
List<ApplicationInfo> installedApplications = pm
.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo : installedApplications) {
if (isApplicationPreInstalled(applicationInfo)) {
allPreInstalledApplications += applicationInfo.processName + "\n";
}
}
return allPreInstalledApplications;
}
private static boolean isApplicationPreInstalled(ApplicationInfo applicationInfo) {
if (applicationInfo != null) {
int allTheFlagsInHex = Integer.valueOf(
String.valueOf(applicationInfo.flags), 16);
/*
If flags is an uneven number, then it
is a preinstalled application, because in that case
ApplicationInfo.FLAG_SYSTEM ( == 0x00000001 )
is added to flags
*/
if ((allTheFlagsInHex % 2) != 0) {
return true;
}
}
return false;
}