Намерение открыть URL не работает для одного приложения, но работает для другого - PullRequest
0 голосов
/ 03 февраля 2020

Мое приложение хочет открыть веб-ссылку (например, https://www.google.com) с помощью этого метода:

public void openUrl(Activity activity, String urlParam) {
    String url = Uri.encode(urlParam);
    Intent browserIntent = new Intent(Intent.CATEGORY_BROWSABLE, Uri.parse(url));

    browserIntent.setAction(ACTION_VIEW);

    activity.startActivity(browserIntent);
}

Я получаю эту ошибку:

android .content.ActivityNotFoundException: не найдено ни одного действия для обработки намерения {act = android .intent.action.VIEW dat = https://www.google.com}

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

startActivity(Intent.createChooser(intent, "Browse with"));

Итак, это также не работает.

Это очень странно, я вижу много похожих вопросов, но нет решения. URL-адрес правильный.

Это файл Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

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

Вот его файл Gradle:

apply plugin: 'android'

android {
    //noinspection GradleCompatible
    compileSdkVersion 28
    buildToolsVersion '28.0.3'

    defaultConfig {
        applicationId "com.myappname.app"
        versionCode 62

        minSdkVersion 19
        targetSdkVersion 28
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:28.0.0'
}

Как решить вопрос

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Фактическая проблема с использованием Uri.encode(urlParam). Вы кодируете свой URL, но позже вы не расшифруете его для ACTION_VIEW, чтобы понять данные намерения!

    String url = "https://www.google.com/";
    String query = Uri.encode(url, "UTF-8");
    Intent browserIntent = new Intent(CATEGORY_BROWSABLE, Uri.parse(Uri.decode(query)));
    browserIntent.setAction(ACTION_VIEW);
    startActivity(browserIntent);
0 голосов
/ 03 февраля 2020
Uri uri = Uri.parse("https://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Я получил ту же ошибку android .content.ActivityNotFoundException: не найдена активность для обработки намерения

Проблема заключалась в том, что у меня не было приложения, которое может открывать URL-адреса ( т.е. браузеры) установлены в моем телефоне. Поэтому после установки браузера проблема была решена.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...