我想知道已安装的应用列表并打印logcat。我写了一些代码,可以打印已安装的应用程序列表,这是我的代码
public void getInstalledApps() {
List<PackageInfo> packList = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packList.size(); i++) {
PackageInfo packInfo = packList.get(i);
if (((packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true) {
appName = packInfo.applicationInfo.loadLabel(
getPackageManager()).toString();
Log.d("install ", appName);
installedapps = appName;
}
}
Toast.makeText(getApplicationContext(), installedapps, Toast.LENGTH_LONG).show();
}
只显示已安装的应用上的toast消息。有什么问题?如果有人知道解决方案,请帮助我。我想在公共字符串installedapps
中分配AppName
答案 0 :(得分:0)
发生的事情是,每次将应用名称分配给变量“installedapps”时,基本上都会覆盖之前的值。你将最终得到的是循环中的最后一个appname值。
如何尝试以下代码。我只编写了你所写的代码。
getInstalledApps(){
StringBuilder sb = new StringBuilder();
// your loop
// your condition
sb.append(appName).append(" # ");
// end condition
// end loop
installedapps = sb.toString();
Toast.makeText(.., sb.toString(), 1000);
}
您也可以尝试installedapps = installedapps + appName
,但这是一种错误的做法。您应该使用StringBuilder方法。
答案 1 :(得分:0)
每次循环,您都会指定installedapps = AppName
;
因此,当循环退出时,installedapps
将等于最后一个应用程序。
试试这个
public void getInstalledApps() {
List<PackageInfo> PackList = getPackageManager().getInstalledPackages(0);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < PackList.size(); i++) {
PackageInfo PackInfo = PackList.get(i);
if (((PackInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true) {
AppName = PackInfo.applicationInfo.loadLabel(
getPackageManager()).toString();
Log.d("install ", AppName);
sb.append(AppName + "\");
}
}
Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_LONG).show();
}
如果你不了解StringBuilder,请谷歌。