我想确定手机内存和手机上安装的应用列表。移动到SD卡。 我正在使用以下功能来获取已安装的应用程序列表。
我已检查过InstalledAppDetails的Android源代码,但无法获得解决方案。
提前谢谢
private List<App> loadInstalledApps(boolean includeSysApps)
{
List<App> apps = new ArrayList<App>();
// the package manager contains the information about all installed apps
PackageManager packageManager = getPackageManager();
List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA
for(int i = 0; i < packs.size(); i++)
{
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
// skip system apps if they shall not be included
if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1))
{
continue;
}
App app = new App();
app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
app.setPackageName(p.packageName);
app.setVersionName(p.versionName);
app.setVersionCode(p.versionCode);
app.setInstallDir(p.applicationInfo.sourceDir);
app.setInstallSize(calculateSize(app.getInstallDir()));
CharSequence description = p.applicationInfo.loadDescription(packageManager);
app.setDescription(description != null ? description.toString() : "");
if(app.getInstallDir().contains("/mnt"))
{
//app on sdcard
apps.add(app);
}
else
{
//app on phone memory
apps.add(app);
}
}
return apps;
}
答案 0 :(得分:2)
应用安装位置在您应用的AndroidManifest.xml中指定。看一下here了解更多信息。简而言之:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >
或
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto"
... >
其中auto
表示应用可能安装在外部设备上,但您没有偏好; preferExternal
表示应用程序将尽可能安装在外部设备上
请记住......
如果您没有声明此属性,那么您的应用程序将是 仅安装在内部存储器上,无法移动到 外部存储。
所以,现在的问题是如何从应用程序中获取androidManifest.xml文件。好吧,你可以从APK(如果安装后没有删除)。对于这个问题,请看一下这篇文章:How to parse the AndroidManifest.xml file inside an .apk package
最后,关于解析xml的一个很棒的主题也可以在这篇文章中找到。 Accessing android:installLocation manifest attribute
干杯, 醛