При попытке загрузить URL-адрес в браузере возникает ошибка «Не найдено действий для обработки намерений». - PullRequest
0 голосов
/ 22 января 2019

Я проверил похожие вопросы об ошибке No Activity found to handle Intent.ни одна из них не покрывала мою проблему.

Я получаю эту ошибку в своих журналах Sentry, когда приложение собирается открыть URL-адрес в браузере Chrome с помощью Intent в AppCompatActivity :

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); сообщил об ошибке.

и это метод isAppInstalled(), который находится в классе MyMethods:

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;
}

иногда дело доходит до цели.Как вы видите, я проверил, установлен ли Chrome на устройстве или нет, поэтому он установлен, если он больше не идет!в этой ситуации, почему он не смог выполнить startActivity(intent); и пошел перехватывать область?

‍ Мой код находится в Activity, поэтому я должен использовать intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); или нет?

Ответы [ 3 ]

0 голосов
/ 22 января 2019
   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
    }

вы можете сделать это таким образом, чтобы избежать сбоя, а также установить это приложение или нет.

0 голосов
/ 22 января 2019

Чтобы проверить, установлен ли 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;
}
0 голосов
/ 22 января 2019

Не нужно проверять хром, он найдет сам браузер. Обратите внимание, что URL должен начинаться с http или https.

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