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