Как я могу открыть URL в веб-браузере Android из моего приложения? - PullRequest
1226 голосов
/ 04 февраля 2010

Как открыть URL из кода во встроенном веб-браузере, а не в моем приложении?

Я пробовал это:

try {
    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
    startActivity(myIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(this, "No application can handle this request."
        + " Please install a webbrowser",  Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

но я получил исключение:

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com

Ответы [ 31 ]

6 голосов
/ 03 декабря 2013

Версия с коротким кодом ...

 if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
     strUrl= "http://" + strUrl;
 }


 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));
6 голосов
/ 09 января 2014

Вставьте в свой блок try следующий код. Android Intent напрямую использует ссылку в фигурных скобках URI (Uniform Resource Identifier), чтобы определить местоположение вашей ссылки.

Вы можете попробовать это:

Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
4 голосов
/ 04 сентября 2014
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
3 голосов
/ 11 июля 2017

Ответ MarkB правильный. В моем случае я использую Xamarin, и код для использования с C # и Xamarin:

var uri = Android.Net.Uri.Parse ("http://www.xamarin.com");
var intent = new Intent (Intent.ActionView, uri);
StartActivity (intent);

Эта информация взята из: https://developer.xamarin.com/recipes/android/fundamentals/intent/open_a_webpage_in_the_browser_application/

3 голосов
/ 19 августа 2016

Пользовательские вкладки Chrome теперь доступны:

Первым шагом является добавление библиотеки поддержки пользовательских вкладок в файл build.gradle:

dependencies {
    ...
    compile 'com.android.support:customtabs:24.2.0'
}

А затем, чтобы открыть пользовательскую вкладку Chrome:

String url = "https://www.google.pt/";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));

Для получения дополнительной информации: https://developer.chrome.com/multidevice/android/customtabs

3 голосов
/ 17 июля 2014
Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);
2 голосов
/ 08 ноября 2014

Простой, просмотр веб-сайта через намерение,

Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.yoursite.in"));
startActivity(viewIntent);  

используйте этот простой код для просмотра вашего сайта в приложении для Android.

Добавить интернет-разрешение в файле манифеста,

<uses-permission android:name="android.permission.INTERNET" /> 
2 голосов
/ 16 декабря 2016

Основано на ответе Марка Б и комментариях ниже:

protected void launchUrl(String url) {
    Uri uri = Uri.parse(url);

    if (uri.getScheme() == null || uri.getScheme().isEmpty()) {
        uri = Uri.parse("http://" + url);
    }

    Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);

    if (browserIntent.resolveActivity(getPackageManager()) != null) {
        startActivity(browserIntent);
    }
}
1 голос
/ 01 мая 2017

Этот способ использует метод, позволяющий вам вводить любую строку вместо фиксированного ввода. Это сохраняет некоторые строки кода, если их использовать многократно, так как для вызова метода требуется всего три строки.

public Intent getWebIntent(String url) {
    //Make sure it is a valid URL before parsing the URL.
    if(!url.contains("http://") && !url.contains("https://")){
        //If it isn't, just add the HTTP protocol at the start of the URL.
        url = "http://" + url;
    }
    //create the intent
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)/*And parse the valid URL. It doesn't need to be changed at this point, it we don't create an instance for it*/);
    if (intent.resolveActivity(getPackageManager()) != null) {
        //Make sure there is an app to handle this intent
        return intent;
    }
    //If there is no app, return null.
    return null;
}

Использование этого метода делает его универсальным для использования. ИТ не нужно помещать в конкретную деятельность, так как вы можете использовать ее следующим образом:

Intent i = getWebIntent("google.com");
if(i != null)
    startActivity();

Или, если вы хотите запустить его вне действия, просто вызовите startActivity для экземпляра действия:

Intent i = getWebIntent("google.com");
if(i != null)
    activityInstance.startActivity(i);

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

Этот метод по умолчанию использует HTTP, если протокол не определен, так как есть сайты, у которых нет SSL-сертификата (что вам нужно для подключения HTTPS), и те перестанут работать, если вы попытаетесь использовать HTTPS, и это не так. не там. Любой веб-сайт все еще может принудительно перейти на HTTPS, поэтому эти стороны в любом случае приводят вас к HTTPS


Поскольку этот метод использует внешние ресурсы для отображения страницы, вам не нужно объявлять разрешение INternet. Приложение, которое отображает веб-страницу, должно сделать это

1 голос
/ 22 января 2018

// OnClick Listener

  @Override
      public void onClick(View v) {
        String webUrl = news.getNewsURL();
        if(webUrl!="")
        Utils.intentWebURL(mContext, webUrl);
      }

// Ваш метод использования

public static void intentWebURL(Context context, String url) {
        if (!url.startsWith("http://") && !url.startsWith("https://")) {
            url = "http://" + url;
        }
        boolean flag = isURL(url);
        if (flag) {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse(url));
            context.startActivity(browserIntent);
        }

    }
...