Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的PackageManager提供副本_Android_Android Package Managers - Fatal编程技术网

Android中的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 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++;
}