如何检测android中的任何系统应用程序(预装)是否从其基础软件包升级?
同样,我想知道包是否包含至少一个处理家庭意图过滤器的活动?
答案 0 :(得分:2)
我找到了解决方案。
检测是否已从其基本版本升级任何系统应用程序 -
List<PackageInfo> applications = getPackageManager()
.getInstalledPackages(0);
for (PackageInfo info : applications) {
long firstInstalled = info.firstInstallTime;
long lastUpdate = info.lastUpdateTime;
try {
ApplicationInfo ai = getPackageManager().getApplicationInfo(
info.applicationInfo.packageName, 0);
if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0 /*Check system app*/
&& firstInstalled != lastUpdate /*check for updated */) {
Log.i(TAG,
"Upgraded pre installed app is "
+ info.applicationInfo
.loadLabel(getPackageManager()).toString());
}
} catch (NameNotFoundException e) {
Log.e("The exception is"+e.getMessage());
}
}
甚至还有一个选项可以使用..
来检查if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)
{
// APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP
}
检测Home Launcher应用程序 -
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> rinf = getPackageManager().queryIntentActivities(
mainIntent, 0);
if (rinf != null) {
for (ResolveInfo ri : rinf) {
ActivityInfo ai = ri.activityInfo;
if (ai == null) {
continue;
}
Log.i(TAG, "The Home Launcher Activity is " + ai.packageName);
}
}
答案 1 :(得分:1)
对于第一个,您可以转到设置并检查它是否为您提供卸载选项或仅卸载更新(意味着此apk在系统中)。
第二个我将连接设备并检查Logcat。
在代码中: 获取包及其PackageInfo,您可以访问其lastUpdateTime及其firstInstallTime。关于第二个,我不知道,但如果你发现如何请分享它,请:)