如何检测到 android 中的任何系统应用程序(预安装)是从其基础包升级的?
另外,我想知道 package 是否包含至少一个处理 home 意图过滤器的活动?
如何检测到 android 中的任何系统应用程序(预安装)是从其基础包升级的?
另外,我想知道 package 是否包含至少一个处理 home 意图过滤器的活动?
我找到了解决方案。
要检测是否有任何系统应用程序已从其基本版本升级 -
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);
}
}
对于第一个,您可以转到设置并检查它是否为您提供卸载或仅卸载更新的选项(意味着此 apk 在系统中)。
第二个我将连接设备并检查 Logcat。
在代码中:获取包和它的PackageInfo,在那里你可以访问它的 lastUpdateTime 和它的 firstInstallTime。关于第二个,我不知道,但如果你找到方法,请分享它:)