Android中的PackageManager提供副本
我可能是一个新手程序员,但PackageManager很复杂! 我要向你们展示的东西毫无意义: 我可以提取设备上应用程序的名称,但如果我尝试保存到阵列,则只能保存其中的一半Android中的PackageManager提供副本,android,android-package-managers,Android,Android Package Managers,我可能是一个新手程序员,但PackageManager很复杂! 我要向你们展示的东西毫无意义: 我可以提取设备上应用程序的名称,但如果我尝试保存到阵列,则只能保存其中的一半 PackageManager packageManager = null; List<ApplicationInfo> appsListTest = new ArrayList<ApplicationInfo>(); packageManager = context.g
PackageManager packageManager = null;
List<ApplicationInfo> appsListTest = new ArrayList<ApplicationInfo>();
packageManager = context.getPackageManager();
appsListTest = packageManager.getInstalledApplications(0);
Log.d("LOG", " New PM : " + appsListTest.size());
Iterator<ApplicationInfo> iterator = appsListTest.iterator();
int counter = 0;
String[] appName = new String[appsListTest.size()];
while (iterator.hasNext()) {
Log.d("LOG", String.valueOf(counter));
// When I print out by itself I see 64 apps. Great
Log.d("LOG", (String) iterator.next().loadLabel(packageManager));
// Now when I try to save to array I only get 30
appName[counter] = (String) iterator.next().loadLabel(packageManager);
counter++;
}
应用程序不会崩溃或发生任何事情
有人能给我看一些关于如何获取应用程序名称、uid和图标的代码吗?iterator.next()推进列表-每个循环推进两次。相反,您应该将迭代器.next()的结果保存为变量,然后在循环中使用该变量:
while (iterator.hasNext()) {
Log.d("LOG", String.valueOf(counter));
// Only call iterator.next() once per loop
ApplicationInfo info = iterator.next();
String label = (String) info.loadLabel(packageManager);
Log.d("LOG", label);
appName[counter] = label;
counter++;
}
while (iterator.hasNext()) {
Log.d("LOG", String.valueOf(counter));
// Only call iterator.next() once per loop
ApplicationInfo info = iterator.next();
String label = (String) info.loadLabel(packageManager);
Log.d("LOG", label);
appName[counter] = label;
counter++;
}