如何检索所有已安装的android应用程序

如何检索所有已安装的android应用程序,android,android-intent,Android,Android Intent,我之前已经在Stackoverflow和Google上搜索过了,但是我找不到任何适合我的答案,因为我在使用它们时出错,或者缺少某些代码/部件,或者可能需要安装其他库文件 所以基本上我想做的是检索安卓手机上安装的所有应用程序并将其显示出来,但我不知道该怎么做。关于“context”变量,我通常会遇到错误,或者我的xml文件在某种程度上与.java文件不匹配 为了实现检索所有android应用程序的目标,是否有人能给我所有必需文件(如xml、java、清单、drawable、layout等)的源代码

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

所以基本上我想做的是检索安卓手机上安装的所有应用程序并将其显示出来,但我不知道该怎么做。关于“context”变量,我通常会遇到错误,或者我的xml文件在某种程度上与.java文件不匹配

为了实现检索所有android应用程序的目标,是否有人能给我所有必需文件(如xml、java、清单、drawable、layout等)的源代码?非常感谢您的帮助

公共类应用程序扩展活动{
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));
    }
}
私有列表视图lView; private ArrayList results=new ArrayList(); @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); lView=(ListView)findViewById(R.id.list1); PackageManager pm=this.getPackageManager(); 意图=新意图(Intent.ACTION\u MAIN,空); intent.addCategory(intent.CATEGORY_启动器); List List=pm.QUERYINTENTACTIVES(意图、PackageManager.PERMISSION_授权); 对于(ResolveInfo-rInfo:list){ 结果.添加(rInfo.activityInfo.applicationInfo) .loadLabel(pm.toString()); Log.w(“已安装的应用程序”,rInfo.activityInfo.applicationInfo .loadLabel(pm.toString()); } setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,results)); } }
首先创建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>
编辑-如果要从列表中打开应用程序,请单击它。您必须重写ListView的onItemClick方法,并且在该方法中,您必须传递打开所选应用程序的意图

看看这里


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

答案可能是正确的,但不幸的是,我遇到了很多错误,因为我不知道要改变什么才能实现我的目标,这让我不知所措,尽管我在这个网站上搜索了答案。如果能提供更多帮助,如上述代码如何与xml文件结合,我将不胜感激。对于Nipun Gogia提供的代码,我在“for(ResolveInfo-rInfo:list){”部分遇到了错误,其中列表以红色下划线。此外,对于“lView=(ListView)findViewById(R.id.list1);”另一方面,列表1也用红色下划线。两个变量“private ListView lView;”和“private ArrayList results=new ArrayList();”各自的变量名(IView和results)也用红色下划线。知道它们为什么用红色下划线吗?您是否制作了包含列表的xml?只需替换这一行“List List List=pm.querytentActivities”(intent,PackageManager.PERMISSION_grated);“停止混淆他人。首先,发布您的代码和错误,并描述您的问题。只有这样才能帮助您。没有人可以在不查看代码的情况下猜出您遇到的问题。好吧,对于Nipun Gogia提供的代码,我在“for(ResolveInfo:list)”中遇到了错误{“列表部分用红色下划线。另外,对于“lView=(ListView)findViewById(R.id.list1);”部分,list1也用红色下划线。两个变量“private ListView lView;”和“private ArrayList results=new ArrayList();”有各自的变量名(IView和results)也用红色下划线。知道为什么它们是红色的吗?它们被读取了,因为它们不仅仅是初始化的。感谢它为应用程序的检索工作,只是它是文本列表形式而不是图片图标形式,并且应用程序无法访问。代码中的任何细微更改是否能够将其变形为图标并使应用程序可访问le?你想在点击后打开应用程序吗?这完全是另一回事。你必须将意图传递给特定的应用程序才能打开它。那么,在这种情况下,代码会是什么样子?抱歉,强加太多,但我真的不擅长安卓编程,因为我没有做太多,并且正在努力满足紧迫的需求deadlines@user1977094 :查看我编辑的下一期答案。它肯定会解决你的问题。如果有帮助,也不要忘记将其标记为答案。上面的代码似乎没有达到我想要的结果,无论是列表变成图标,还是应用程序可以访问,事实上,如果我没有看到错误,代码中没有任何更改,但我很抱歉可能是错的。
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));
    }
}