【问题标题】:how to retrieve all installed android applications如何检索所有已安装的 android 应用程序
【发布时间】:2013-01-14 11:14:19
【问题描述】:

我之前已经在 Stackoverflow 和 Google 上进行过搜索,但我找不到任何适合我的答案,因为我在使用它们时遇到错误,或者缺少某些代码/部分,或者可能需要安装额外的库文件。

所以基本上我想做的是检索Android手机中所有已安装的应用程序并将其显示出来,但我不知道如何去做。我通常会遇到关于“上下文”变量的错误,或者我的 xml 文件与 .java 文件不匹配。

有没有人愿意给我所有必需文件的源代码(例如 xml、java、manifest、drawable、布局等),以实现检索所有 android 应用程序的目标?非常感谢您的帮助

【问题讨论】:

  • 别再混淆别人了。首先,发布您的代码以及错误并描述您的问题。只有这样才能帮助你。如果不查看您的代码,没有人会猜到您遇到的问题。
  • 对于 Nipun Gogia 提供的代码,我在 "for (ResolveInfo rInfo : list) {" 部分遇到了错误,其中列表带有红色下划线。此外,对于“lView = (ListView) findViewById(R.id.list1);”部分,list1 也用红色下划线。 2个变量“私有ListView lView;”和“私有 ArrayList 结果 = new ArrayList();”它们各自的变量名称(IView 和结果)也用红色下划线。知道为什么它们是红色的吗?
  • 它们被读取,因为它们不只是被初始化。

标签: android android-intent


【解决方案1】:

首先创建main.xml文件如下,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

            <ListView
                android:id="@+id/list1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>

</LinearLayout>

list 将用于填充已安装的应用程序,

现在创建 Activity 类来获取已安装的应用程序,

public class AppList extends Activity {
    private ListView lView;
    private ArrayList results;
    List<ResolveInfo> list;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
            results = new ArrayList();
        lView = (ListView) findViewById(R.id.list1);
        PackageManager pm = this.getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        list = pm.queryIntentActivities(intent,
            PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo : list) {
            results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)
                    .toString());
            Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                    .loadLabel(pm).toString());
        }
        lView.setAdapter(new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, results));
    }
}

编辑-如果您想从列表中打开应用程序,请单击它。您必须重写 ListView 的 onItemClick 方法,并且在该方法中,您必须传递打开所选应用程序的意图。

看这里,

这些很可能会解决您的问题。

【讨论】:

  • 感谢它用于检索应用程序,只是它是文本列表形式而不是图片图标形式,并且无法访问应用程序。代码中的任何细微更改都可以将其变形为图标并使应用程序可访问吗?
  • 你想打开应用程序点击它。那是完全不同的事情。您必须将意图传递给该特定应用程序才能打开它。
  • 那么在这种情况下,代码会是什么样子呢?很抱歉强加了太多,但我在 Android 编程方面真的很糟糕,因为我没有做太多,并且正在努力满足紧迫的最后期限
  • @user1977094 :请参阅我为您的下一个问题编辑的答案。它肯定会解决你的问题。如果有帮助,也不要忘记将其标记为答案。
  • 上面的代码似乎并没有达到我想要的效果,不管是列表变成图标,还是app可以访问,其实如果我没看错的话,就是没有t 代码中的任何更改,但我可能是错的。
【解决方案2】:
public class AppList extends Activity {
 private ListView lView;
 private ArrayList results = new ArrayList();

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  lView = (ListView) findViewById(R.id.list1);
  PackageManager pm = this.getPackageManager();

  Intent intent = new Intent(Intent.ACTION_MAIN, null);
  intent.addCategory(Intent.CATEGORY_LAUNCHER);

  List<ResolveInfo>  list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
  for (ResolveInfo rInfo : list) {
   results.add(rInfo.activityInfo.applicationInfo
     .loadLabel(pm).toString());
   Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
     .loadLabel(pm).toString());
  } 
  lView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, results));
    }
}

【讨论】:

  • 答案可能是正确的,但不幸的是,我遇到了很多错误,因为我不知道要改变什么才能实现我的目标,尽管我已经用谷歌搜索并搜索了答案,但这让我一无所知这个网站本身。如果提供更多帮助,例如上述代码如何与 xml 文件结合在一起,将不胜感激
  • 对于 Nipun Gogia 提供的代码,我在 "for (ResolveInfo rInfo : list) {" 部分遇到了错误,其中列表带有红色下划线。此外,对于“lView = (ListView) findViewById(R.id.list1);”部分,list1 也用红色下划线。 2个变量“私有ListView lView;”和“私有 ArrayList 结果 = new ArrayList();”它们各自的变量名称(IView 和结果)也用红色下划线。知道为什么它们是红色的吗?
  • 你制作了一个包含列表的xml
  • 只需替换这一行“List list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-29
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多