如何检测是否已从设备中安装的基本版本升级任何应用程序,并检测它是否为家庭启动器应用程序?

时间:2013-06-13 07:22:56

标签: android android-intent android-package-managers

如何检测android中的任何系统应用程序(预装)是否从其基础软件包升级?

同样,我想知道包是否包含至少一个处理家庭意图过滤器的活动?

2 个答案:

答案 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。关于第二个,我不知道,但如果你发现如何请分享它,请:)