2

首先,我想说这是我在 StackOverflow 上的第一篇文章,所以我希望我做得对。

我正在尝试制作一个显示所有用户应用程序的 Android 应用程序。我遇到的问题是某些应用程序被多次显示。我不知道如何检查与包相关的活动,但我认为这是与此类似的情况:

Android:如何获取已安装活动的列表,就像它们出现在启动器中一样,没有重复

Intent 解决方案不显示任何重复项,但我将如何使用类似的内容在 GridView 中显示?

编辑:感谢您的快速回复。这是我已经获得包裹的方式。但是,我没有使用 0 标志。替换 0 标志后,我仍然收到重复。是否与 GridView 的工作方式有关?我碰巧注意到,当我在网格视图上向下滚动并返回时,我的列表顺序不同。

将应用程序拉入列表的代码:

ArrayList<ApplicationInfo> apps =  (ArrayList<ApplicationInfo>) manager.getInstalledApplications(0);  //manager is a variable containing getPackageManager

编辑2:

使用以下代码输出 ArrayList 后:

 for(int i = 0; i < apps.size(); i++){

        Log.i((String) apps.get(i).loadLabel(manager), apps.get(i).packageName);

    }

我可以得出结论,数组中没有重复项。但是,它们以某种方式出现在网格视图中。

最终编辑:

这个问题的最佳答案最终解决了 GridView 问题:

屏幕滚动时,GridView 中的项目会重复

4

2 回答 2

2

这是获取当前安装的软件包的另一种方法。当我以这种方式获取信息时,我不会得到重复:

            PackageManager packageManager = null;
            List<ApplicationInfo> appsList = new ArrayList<ApplicationInfo>();
            try {
                packageManager = getPackageManager();
                if (packageManager != null) {
                    appsList = packageManager.getInstalledApplications(0);
                }
            } catch (Exception e1) {
                Log.v("TAG", "This is my error: ", e1);
            }

然后,您可以从 ApplicationInfo 对象中检索各种信息(包括图标、名称等)。

于 2013-01-10T15:41:02.737 回答
0

这应该一劳永逸地解决问题。

     PackageManager packageManager = null;
 List<ApplicationInfo> appsListTest = new ArrayList<ApplicationInfo>();
 try {

     packageManager = context.getPackageManager();
     if (packageManager != null) {
         appsListTest = packageManager.getInstalledApplications(0);

     }
 } catch (Exception e1) {
     Log.v("TAG", "This is my error: ", e1);
 }

 Log.d("LOG", " New PM : " + appsListTest.size() );

 Iterator<ApplicationInfo> iterator = appsListTest.iterator();
while (iterator.hasNext()) {
    Log.d("LOG", " : " + iterator.next().loadLabel(packageManager).toString());



}
于 2013-05-02T20:23:08.357 回答