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

Как открыть 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

28 ответов


попробуйте это:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);

это отлично работает для меня.

Что касается отсутствующего" http://", я бы просто сделал что-то вроде этого:

if (!url.startsWith("http://") && !url.startsWith("https://"))
   url = "http://" + url;

Я также, вероятно, предварительно заполню ваш EditText, который пользователь вводит URL-адрес с помощью " http://".


общий способ достичь этого - со следующим кодом:

String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url)); 
startActivity(i); 

это может быть изменено на короткую версию кода ...

Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));      
startActivity(intent); 

или :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")); 
startActivity(intent);

самый короткий! :

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));

удачи в кодировании!


в 2.3 мне больше повезло с

final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);

разница заключается в использовании Intent.ACTION_VIEW вместо строки "android.intent.action.VIEW"


Простой Ответ

вы можете ознакомиться официальный образец от разработчика Android.

/**
 * Open a web page of a specified URL
 *
 * @param url URL to open
 */
public void openWebPage(String url) {
    Uri webpage = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

как это работает

пожалуйста, посмотрите на конструктор Intent:

public Intent (String action, Uri uri)

вы можете пройти android.net.Uri экземпляр для 2-го параметра, и новое намерение создается на основе заданного url-адреса данных.

и затем просто позвонить startActivity(Intent intent) чтобы начать новую деятельность, которая в комплекте с намерением с заданный URL.

мне нужно if проверить заявление?

да. The docs говорит:

если на устройстве нет приложений, которые могут получить неявное намерение, ваше приложение аварийно завершит работу при вызове startActivity(). Чтобы сначала убедиться, что приложение существует для получения намерения, вызовите resolveActivity() для объекта Intent. Если результат не равен null, есть по крайней мере одно приложение, которое может обрабатывать намерение, и безопасно вызывать startActivity(). Если результат равен null, не следует использовать intent и, если возможно, следует отключить функцию, вызывающую intent.

бонус

вы можете написать в одной строке при создании экземпляра Intent, как показано ниже:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

попробуйте это:

Uri uri = Uri.parse("https://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));

или если вы хотите, то веб-браузера в вашей деятельности, то делай так:

WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);

и если вы хотите использовать zoom control в вашем браузере, то вы можете использовать:

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);

Если вы хотите показать пользователю Диалог со всем списком браузера, чтобы он мог выбрать предпочтительный, вот пример кода:

private static final String HTTPS = "https://";
private static final String HTTP = "http://";

public static void openBrowser(final Context context, String url) {

     if (!url.startsWith(HTTP) && !url.startsWith(HTTPS)) {
            url = HTTP + url;
     }

     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     context.startActivity(Intent.createChooser(intent, "Choose browser"));// Choose browser is arbitrary :)

}

Как и другие решения, написанные (которые работают нормально), я хотел бы ответить на то же самое, но с подсказкой, которую, я думаю, большинство предпочло бы использовать.

Если вы хотите, чтобы приложение, которое вы начинаете открывать в новой задаче, самостоятельно, вместо того, чтобы оставаться в одном стеке, вы можете использовать этот код:

final Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);

другой вариант в Url загрузки в том же приложении с помощью Webview

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");

вы также можете пойти этим путем

в xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView  
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

в коде java:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.google.com");

 }

}

в Манифесте не забудьте добавить разрешение в интернет...


Webview можно использовать для Загрузки Url-адреса в приложении. URL-адрес может быть предоставлен от пользователя в текстовом представлении или вы можете жестко его закодировать.

также не забудьте разрешения в AndroidManifest.

String url="http://developer.android.com/index.html"

WebView wv=(WebView)findViewById(R.id.webView);
wv.setWebViewClient(new MyBrowser());
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.loadUrl(url);

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

короткая версия кода...

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


 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));

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

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

Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);

String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

Intent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink));          
startActivity(getWebPage);

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

первым шагом является добавление библиотеки поддержки пользовательских вкладок в сборку.файл 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


ответ 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/


простой, просмотр веб-сайта через intent,

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

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

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

<uses-permission android:name="android.permission.INTERNET" /> 

проверьте правильность вашего url-адреса. Для меня было нежелательное пространство перед url.


Я думаю, что это лучший

openBrowser(context, "http://www.google.com")

поставить ниже код в глобальный класс

    public static void openBrowser(Context context, String url) {

        if (!url.startsWith("http://") && !url.startsWith("https://"))
            url = "http://" + url;

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

основываясь на ответе Марка B и комментариях ниже:

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

android.webkit.URLUtil имеет способ guessUrl(String) работает отлично (даже с file:// или data://) С Api level 1 (Android 1.0). Использовать как:

String url = URLUtil.guessUrl(link);

// url.com            ->  http://url.com/     (adds http://)
// http://url         ->  http://url.com/     (adds .com)
// https://url        ->  https://url.com/    (adds .com)
// url                ->  http://www.url.com/ (adds http://www. and .com)
// http://www.url.com ->  http://www.url.com/ 
// https://url.com    ->  https://url.com/
// file://dir/to/file ->  file://dir/to/file
// data://dataline    ->  data://dataline
// content://test     ->  content://test

в вызова:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));

if (intent.resolveActivity(getPackageManager()) != null)
    startActivity(intent);

Регистрация полностью guessUrl код для получения дополнительной информации.


/ / Слушатель OnClick

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

/ / Ваш Метод Util

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

    }

попробуйте это..Работал на меня!

    public void webLaunch(View view) {
            WebView myWebView = (WebView) findViewById(R.id.webview);
            myWebView.setVisibility(View.VISIBLE);
            View view1=findViewById(R.id.recharge);
            view1.setVisibility(View.GONE);
            myWebView.getSettings().setJavaScriptEnabled(true);
            myWebView.loadUrl("<your link>");

        }

код xml: -

 <WebView  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />

--------- или------------------

String url = "";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

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

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

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

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


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


хорошо, я проверил каждый ответ, но какое приложение имеет deeplinking с тем же URL, который пользователь хочет использовать?

сегодня я получил этот случай и ответ browserIntent.setPackage("browser_package_name");

например :

   Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
    browserIntent.setPackage("com.android.chrome"); // Whatever browser you are using
    startActivity(browserIntent);

спасибо!


попробуй этот OmegaIntentBuilder

OmegaIntentBuilder.from(context)
                .web("Your url here")
                .createIntentHandler()
                .failToast("You don't have app for open urls")
                .startActivity();

Введение:

https:// использует это в "коде", чтобы никто между ними не мог их прочитать. Это защищает вашу информацию от хакеров.

http:// использует только цель совместного использования, она не защищена.

О Вашей Проблеме:
проектирование XML-код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.sridhar.sharedpreferencesstackoverflow.MainActivity">
   <LinearLayout
       android:orientation="horizontal"
       android:background="#228b22"
       android:layout_weight="1"
       android:layout_width="match_parent"
       android:layout_height="0dp">
      <Button
          android:id="@+id/normal_search"
          android:text="secure Search"
          android:onClick="secure"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="wrap_content" />
      <Button
          android:id="@+id/secure_search"
          android:text="Normal Search"
          android:onClick="normal"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="wrap_content" />
   </LinearLayout>

   <LinearLayout
       android:layout_weight="9"
       android:id="@+id/button_container"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:orientation="horizontal">

      <WebView
          android:id="@+id/webView1"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

   </LinearLayout>
</LinearLayout>

Проектировочной Деятельности:

public class MainActivity extends Activity {
    //securely open the browser
    public String Url_secure="https://www.stackoverflow.com";
    //normal purpouse
    public String Url_normal="https://www.stackoverflow.com";

    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView=(WebView)findViewById(R.id.webView1);

    }
    public void secure(View view){
        webView.setWebViewClient(new SecureSearch());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(Url_secure);
    }
    public void normal(View view){
        webView.setWebViewClient(new NormalSearch());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(Url_normal);

    }
    public class SecureSearch extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String Url_secure) {
            view.loadUrl(Url_secure);
            return true;
        }
    }
    public class NormalSearch extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String Url_normal) {
            view.loadUrl(Url_normal);
            return true;
        }
    }
}

Манифест Android.В XML permissions:

<uses-permission android:name="android.permission.INTERNET"/>

вы сталкиваетесь с проблемами при реализации этого:

  1. получение Манифест разрешения
  2. избыточное пространство между url
  3. Проверьте URL-адреса!--5--> правильно или нет

Если вы хотите сделать это с XML не программно, вы можете использовать в своем TextView:

android:autoLink="web"
android:linksClickable="true"