내 응용 프로그램에서 Android 웹 브라우저의 URL을 어떻게 열 수 있습니까? 아닌 내장 웹 브라우저의

내 응용 프로그램이 아닌 내장 웹 브라우저의 코드에서 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



답변

이 시도:

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;

또한 사용자가 “http : //”로 URL을 입력하고있는 EditText를 미리 채울 것입니다.


답변

이를 달성하는 일반적인 방법은 다음 코드를 사용하는 것입니다.

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

행복한 코딩!


답변

간단한 답변

Android Developer의 공식 샘플을 볼 수 있습니다 .

/**
 * 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과 함께 Intent에 번들로 제공되는 새 활동을 시작하십시오.

if수표 명세서 가 필요 합니까?

예. 문서는 말합니다 :

장치에 암시 적 의도를 수신 할 수있는 앱이없는 경우 startActivity ()를 호출하면 앱이 중단됩니다. 앱이 의도를 수신 할 수 있는지 먼저 확인하려면 Intent 오브젝트에서 resolveActivity ()를 호출하십시오. 결과가 널이 아닌 경우 의도를 처리 할 수있는 하나 이상의 앱이 있으며 startActivity ()를 호출하는 것이 안전합니다. 결과가 널이면 의도를 사용하지 말고 가능하면 의도를 호출하는 기능을 사용 안함으로 설정해야합니다.

보너스

아래와 같이 Intent 인스턴스를 만들 때 한 줄에 쓸 수 있습니다.

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


답변

2.3에서는 더 나은 행운을 얻었습니다

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

차이점 Intent.ACTION_VIEW은 문자열 이 아닌 사용 이라는 것입니다."android.intent.action.VIEW"


답변

이 시도:

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

브라우저에서 확대 / 축소 컨트롤을 사용하려는 경우 다음을 사용할 수 있습니다.

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.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);

Chrome 맞춤 탭 에서 URL을 여는 방법도 있습니다 . 코 틀린의 예 :

@JvmStatic
fun openWebsite(activity: Activity, websiteUrl: String, useWebBrowserAppAsFallbackIfPossible: Boolean) {
    var websiteUrl = websiteUrl
    if (TextUtils.isEmpty(websiteUrl))
        return
    if (websiteUrl.startsWith("www"))
        websiteUrl = "http://$websiteUrl"
    else if (!websiteUrl.startsWith("http"))
        websiteUrl = "http://www.$websiteUrl"
    val finalWebsiteUrl = websiteUrl
    //https://github.com/GoogleChrome/custom-tabs-client
    val webviewFallback = object : CustomTabActivityHelper.CustomTabFallback {
        override fun openUri(activity: Activity, uri: Uri?) {
            var intent: Intent
            if (useWebBrowserAppAsFallbackIfPossible) {
                intent = Intent(Intent.ACTION_VIEW, Uri.parse(finalWebsiteUrl))
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
                        or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
                if (!CollectionUtil.isEmpty(activity.packageManager.queryIntentActivities(intent, 0))) {
                    activity.startActivity(intent)
                    return
                }
            }
            // open our own Activity to show the URL
            intent = Intent(activity, WebViewActivity::class.java)
            WebViewActivity.prepareIntent(intent, finalWebsiteUrl)
            activity.startActivity(intent)
        }
    }
    val uri = Uri.parse(finalWebsiteUrl)
    val intentBuilder = CustomTabsIntent.Builder()
    val customTabsIntent = intentBuilder.build()
    customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
            or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
    CustomTabActivityHelper.openCustomTab(activity, customTabsIntent, uri, webviewFallback)
}