是否可以按照我尝试的方式启动应用程序?

时间:2012-06-22 22:16:45

标签: android android-intent

我目前正在制作一个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);
    }
});

1 个答案:

答案 0 :(得分:3)

你写了很棒的代码,但只有你做错了

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

这里所有的努力都被浪费了,因为你完全显示了所有的应用程序名称,但是你正在执行上面代码的onClick of Application name.But getPackageName()将返回当前活动包名称hense,无论你点击它的哪个项目都将重启你的申请。

所以只需改变

 i = pm.getLaunchIntentForPackage(getPackageName());

到此

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

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