当要在浏览器中加载URL时,发生“找不到用于处理意图的活动”错误

时间:2019-01-22 08:43:34

标签: android android-intent activitynotfoundexception

我已经检查了有关@Service错误的类似问题。他们没有一个解决我的问题。

当应用程序要使用 AppCompatActivity 中的Intent在Chrome浏览器中打开URL时,我在Sentry日志中收到此错误:

No Activity found to handle Intent

这是我的代码:

android.content.ActivityNotFoundException: No Activity found to handle Intent
{ act=android.intent.action.VIEW dat=https://www.example.com/...
flg=0x10000000 pkg=com.android.chrome }

Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage("com.android.chrome"); if (MyMethods.isAppInstalled(getApplicationContext(), "com.android.chrome")) { try { startActivity(intent); } catch (ActivityNotFoundException ex) { SentryLog.warn(ex); // Chrome browser presumably not installed so allow user to choose instead intent.setPackage(null); startActivity(intent); } } else { // Chrome browser presumably not installed so allow user to choose instead intent.setPackage(null); startActivity(intent); } 报告了错误。

这是SentryLog.warn(ex);方法,它在MyMethods类中:

isAppInstalled()

有时会赶上范围。如您所见,我检查了设备上是否安装了chrome,因此如果其他设备都没有安装,则会安装它!在这种情况下,为什么它无法执行public static boolean isAppInstalled(Context context, String packageName) { try { if (context != null) { context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); } return true; } catch (PackageManager.NameNotFoundException e) { MyLog.w(TAG, new Throwable().getStackTrace()[0].getLineNumber(), e); e.printStackTrace(); } return false; } 并赶上了范围?

‍ 我的代码在“活动”中,是否应该使用startActivity(intent);

3 个答案:

答案 0 :(得分:0)

无需检查Chrome,它将找到浏览器本身。 注意,URL必须以http或https开头。

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
fragmentActivity.startActivity(browserIntent);

答案 1 :(得分:0)

   try {
        Intent i = new Intent();
        i.setPackage("com.android.chrome");
        i.setAction(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    } catch (Exception e) {
        e.printStackTrace();
        // chrome is not installed in the device
    }

您可以通过这种方式来避免崩溃,也可以安装或不安装该应用。

答案 2 :(得分:0)

要检查是否安装了chrome,可以使用以下方法

private boolean isChromeInstalled() {
    PackageInfo pInfo;
    try {
        pInfo = getPackageManager().getPackageInfo("com.android.chrome", 0);
    } catch (PackageManager.NameNotFoundException e) {
        //chrome is not installed on the device
        return false;
    }
    return true;
}