从当前应用程序加载另一个应用

时间:2013-12-02 12:21:39

标签: android android-intent intentfilter android-package-managers

您好我正在开发一个Android应用程序,我在列表视图中显示所有已安装的应用程序。点击列表项,我试图打开该特定应用程序。

这是我正在尝试的代码

    mListView.setOnItemClickListener(new OnItemClickListener() 
    {
        private Intent intent;

        public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) 
        {

                String packName = (String) listOfapps.get(position).get("packagename");

                intent = getPackageManager().getLaunchIntentForPackage(packName);

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                startActivity(intent);
        }
    });

这适用于某些应用。但是点击“联系人”和几个应用程序,我就会收到“

android.content.ActivityNotFoundException:无法找到显式活动类{com.android.contacts / com.android.internal.app.ResolverActivity};你有没有在AndroidManifest.xml中声明这个活动?

不确定我哪里出错了。  请帮忙。 感谢

3 个答案:

答案 0 :(得分:1)

试试这个

PackageManager pm = getPackageManager();
try
{
    String packageName = "APP_PACKAGENAME";
    Intent launchIntent = pm.getLaunchIntentForPackage(packageName);
    startActivity(launchIntent);
}
catch (Exception e1)
{
}

其中包名称是您要启动的另一个应用程序的包的名称

答案 1 :(得分:1)

可能存在无法提供可以使用的启动器Intent的软件包。为防止您的应用崩溃,您应该能够通过执行此操作来测试启动器Intent是否真正有效:

String packName = (String) listOfapps.get(position).get("packagename");
intent = getPackageManager().getLaunchIntentForPackage(packName);
// See how the package manager will resolve this Intent
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
// Only start the activity if the package manager can resolve the Intent
if (resolveInfo != null) {
    startActivity(intent);
} else {
    // Tell the user he can't launch this app or whatever
}

您也无需在Intent.FLAG_ACTIVITY_NEW_TASK上设置Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDIntent,因为通过调用getLaunchIntentForPackage()已经为您设置了这些标记。

答案 2 :(得分:0)

要打开通讯录和一些内部应用,您需要调用意图。 对于前用于通讯录。你可以试试这个

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);

您可以将 if 子句提供给 mListView.setOnItemClickListener 到内部的某些应用。

希望这会有所帮助。!!