2

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

另外,我想知道 package 是否包含至少一个处理 home 意图过滤器的活动?

4

2 回答 2

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);

     }
  } 
于 2013-06-13T16:27:22.323 回答
1

对于第一个,您可以转到设置并检查它是否为您提供卸载或仅卸载更新的选项(意味着此 apk 在系统中)。

第二个我将连接设备并检查 Logcat。

在代码中:获取包和它的PackageInfo,在那里你可以访问它的 lastUpdateTime 和它的 firstInstallTime。关于第二个,我不知道,但如果你找到方法,请分享它:)

于 2013-06-13T07:27:31.533 回答