过滤SD卡/内部应用程序列表

时间:2011-12-13 01:21:55

标签: android

更新我必须定位Android 2.1。

我试图了解如何以编程方式列出应用,通过SD卡或内部存储进行过滤。

我不确定如何处理这个问题。我应该首先检测SD卡安装点并查看是否有应用程序数据目录?例如

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
  Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);     
  List<ResolveInfo> intents = m_pm.queryIntentActivities(mainIntent, 0);
  File baseSD = Environment.getExternalStorageDirectory();

  int count = intents.size();
  for (int i = 0; i < count; i++) {
    String baseApp = intents.get(i).activityInfo.applicationInfo.dataDir;
    if (baseApp.startsWith(baseSD.getAbsolutePath()) {
      // This is on the SD card, do whatever with the app details
    }
    else {
      // This is on internal storage
    }
  }
}
似乎很低调,必须有一个更合适的方式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

您可以使用此代码检查应用的安装位置:

PackageInfo pi = pm.getPackageInfo("packageName", 0);

if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0)
   ; // stored on internal storage
else 
   ; // stored on sd

请注意,因为从Android API 8开始可以使用FLAG_EXTERNAL_STORAGE。