0

我目前正在制作一个 Android 启动器,并且在 Stackoverflow 上花了很多时间来研究如何做不同的事情。但是,我在打开自己的应用程序时遇到了障碍。我使用的代码是从关于这个主题的其他问题拼凑而成的。我现在有一个已安装应用程序的列表,但是当单击时,我自己的应用程序会重新打开。我认为我以错误的方式使用了错误的意图,但不知道如何解决问题。所以我的问题是:打开选定应用程序的更好方法是什么?下面是使用的代码。注意:我是编码初学者。

PackageManager pm = this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

List < String > myList = new ArrayList < String > ();
ArrayList < ResolveInfo > list = (ArrayList < ResolveInfo > ) pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
for (ResolveInfo rInfo: list) {
    System.out.println("Installed Applications " + rInfo.activityInfo.applicationInfo.loadIcon(pm).toString() + rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
    myList.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());


}

ListView lists = (ListView) findViewById(R.id.content);
ArrayAdapter < String > aa = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, myList);
lists.setAdapter(aa);

lists.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView <? > parent, View view, int position, long id) {
        Intent i = new Intent("android.intent.action.MAIN");
        i.addCategory("android.intent.category.LAUNCHER");
        PackageManager pm = getPackageManager();
        i = pm.getLaunchIntentForPackage(getPackageName());

        startActivity(i);
    }
});
4

1 回答 1

3

你写了很棒的代码,但你犯的唯一错误是

i = pm.getLaunchIntentForPackage(getPackageName());
startActivity(i);

在这里,您所有的努力都白费了,因为您完美地显示了所有应用程序名称,但是您正在执行上面的代码的应用程序名称的 onClick。但是getPackageName()无论您单击哪个项目,它都会返回当前的活动包名称,它将重新启动您的应用程序。

所以只要改变

 i = pm.getLaunchIntentForPackage(getPackageName());

至此

i = pm.getLaunchIntentForPackage(list.get(position).activityInfo.packageName);

它将启动您单击的应用程序!。

于 2012-06-22T22:44:40.350 回答