您好,我正在开发一个 Android 应用程序,我在 ListView 中显示所有已安装的应用程序。单击列表项时,我尝试打开该特定应用。
这是我正在尝试的代码
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:无法找到明确的 Activity 类 {com.android.contacts/com.android.internal.app.ResolverActivity};您是否已在 AndroidManifest.xml 中声明此 Activity ?
不确定我哪里出错了。 请帮忙。 谢谢
最佳答案
可能有些软件包没有提供您可以使用的启动器 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
上设置 Intent.FLAG_ACTIVITY_NEW_TASK
或 Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
,因为这些标志应该已经设置为您通过调用 getLaunchIntentForPackage()
。
关于android - 从当前应用程序加载另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20328241/