您好我正在开发一个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中声明这个活动?
不确定我哪里出错了。 请帮忙。 感谢
答案 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_NEEDED
或Intent
,因为通过调用getLaunchIntentForPackage()
已经为您设置了这些标记。
答案 2 :(得分:0)
要打开通讯录和一些内部应用,您需要调用意图。 对于前用于通讯录。你可以试试这个
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
您可以将 if 子句提供给 mListView.setOnItemClickListener 到内部的某些应用。
希望这会有所帮助。!!