etc./StackOverFlow

내 애플리케이션에서 Android 웹 브라우저의 URL을 열려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2022. 2. 19. 05:48
반응형

질문자 :Arutha


내 애플리케이션이 아닌 내장 웹 브라우저의 코드에서 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를 미리 채울 것입니다.


Mark B

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

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

행복한 코딩!


Jorgesys

간단한 답변

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 인스턴스를 전달할 수 있으며, 주어진 데이터 URL을 기반으로 새로운 Intent가 생성됩니다.

그런 다음 단순히 startActivity(Intent intent) 를 호출하여 주어진 URL과 함께 Intent와 함께 번들로 제공되는 새 Activity를 시작합니다.

if check 문이 필요합니까?

예. 문서 는 다음과 같이 말합니다.

암시적 인텐트를 수신할 수 있는 앱이 기기에 없는 경우 앱이 startActivity()를 호출할 때 앱이 충돌합니다. 인텐트를 수신하기 위해 앱이 존재하는지 먼저 확인하려면 Intent 객체에서 resolveActivity()를 호출하세요. 결과가 null이 아닌 경우 인텐트를 처리할 수 있는 앱이 하나 이상 있으며 startActivity()를 호출하는 것이 안전합니다. 결과가 null이면 인텐트를 사용해서는 안 되며 가능하면 인텐트를 호출하는 기능을 비활성화해야 합니다.

보너스

아래와 같이 Intent 인스턴스를 생성할 때 한 줄로 작성할 수 있습니다.

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

kenju

2.3에서는 운이 좋았습니다.

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

차이점 "android.intent.action.VIEW" Intent.ACTION_VIEW 사용한다는 점입니다.


MikeNereson

이 시도:

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

nikki

사용자에게 모든 브라우저 목록과 함께 대화 상자를 표시하여 선호하는 항목을 선택할 수 있도록 하려면 샘플 코드가 있습니다.

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

Dmytro Danylyk

다른 사람들이 작성한 솔루션(잘 작동함)과 마찬가지로 동일한 답변을 하고 싶지만 대부분의 사람들이 사용하기를 선호하는 팁이 포함되어 있습니다.

앱을 동일한 스택에 유지하는 대신 독립적으로 새 작업에서 열기 시작하려는 경우 다음 코드를 사용할 수 있습니다.

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

android developer

Webview를 사용하여 동일한 응용 프로그램의 URL 로드에서 다른 옵션

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

Sanket

이쪽으로 가셔도 됩니다

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" />

자바 코드에서 :

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

매니페스트에서 인터넷 권한을 추가하는 것을 잊지 마십시오 ...


Aristo Michael

코틀린 답변:

 val browserIntent = Intent(Intent.ACTION_VIEW, uri) ContextCompat.startActivity(context, browserIntent, null)

더 쉽게 만들기 위해 Uri 에 확장 프로그램을 추가했습니다.

 myUri.openInBrowser(context) fun Uri?.openInBrowser(context: Context) { this ?: return // Do nothing if uri is null val browserIntent = Intent(Intent.ACTION_VIEW, this) ContextCompat.startActivity(context, browserIntent, null) }

보너스로 String을 Uri로 안전하게 변환하는 간단한 확장 함수가 있습니다.

 "https://stackoverflow.com".asUri()?.openInBrowser(context) fun String?.asUri(): Uri? { try { return Uri.parse(this) } catch (e: Exception) {} return null }

Gibolt

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

Gorav Sharma

try 블록 내에 다음 코드를 붙여넣고 Android 인텐트는 링크의 위치를 식별하기 위해 URI(Uniform Resource Identifier) 중괄호 내의 링크를 직접 사용합니다.

당신은 이것을 시도할 수 있습니다:

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

Kanwar_Singh

짧은 코드 버전...

 if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){ strUrl= "http://" + strUrl; } startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));

Jorgesys

단순하고 모범 사례

방법 1:

 String intentUrl="www.google.com"; Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(intentUrl)); if(webIntent.resolveActivity(getPackageManager())!=null){ startActivity(webIntent); }else{ /*show Error Toast or Open play store to download browser*/ }

방법 2:

 try{ String intentUrl="www.google.com"; Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(intentUrl)); startActivity(webIntent); }catch (ActivityNotFoundException e){ /*show Error Toast or Open play store to download browser*/ }

Umasankar

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

Pradeep Sodhi

그래서 다른 모든 답변이 해당 링크에 대한 기본 앱을 열었지만 기본 브라우저가 아니라 내가 원했던 것이기 때문에 오랫동안 이것을 찾았습니다.

나는 마침내 그렇게 할 수 있었다:

 // gathering the default browser final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://")); final ResolveInfo resolveInfo = context.getPackageManager() .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); String defaultBrowserPackageName = resolveInfo.activityInfo.packageName; final Intent intent2 = new Intent(Intent.ACTION_VIEW); intent2.setData(Uri.parse(url)); if (!defaultBrowserPackageName.equals("android") { // android = no default browser is set // (android < 6 or fresh browser install or simply no default set) // if it's the case (not in this block), it will just use normal way. intent2.setPackage(defaultBrowserPackageName); } context.startActivity(intent2);

context 를 알 수 있습니다. 정적 util 메서드에 이것을 사용했기 때문에 액티비티에서 이 작업을 수행하는 경우 필요하지 않습니다.


bopol

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

Abhishek Balani

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/ 에서 가져옵니다.


Juan Carlos Velez

이제 Chrome 맞춤 탭을 사용할 수 있습니다.

첫 번째 단계는 사용자 정의 탭 지원 라이브러리를 build.gradle 파일에 추가하는 것입니다.

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

그런 다음 크롬 사용자 정의 탭을 열려면 다음을 수행하십시오.

 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


francisco_ssb

인텐트를 통한 단순 웹사이트 보기,

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

이 간단한 코드를 사용하여 Android 앱에서 웹사이트를 봅니다.

매니페스트 파일에 인터넷 권한 추가,

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

stacktry

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

divonas

android.webkit.URLUtil Api level 1 (Android 1.0) 이후 file:// 또는 data:// 경우에도) 완벽하게 작동 guessUrl(String) 메서드가 있습니다. 로 사용:

 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 코드 를 확인하세요.


I.G. Pascual

알겠습니다. 모든 답변을 확인했지만 사용자가 사용하려는 동일한 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);

감사합니다!


Vaibhav Kadam

브라우저에서 URL을 열려면 간단히 짧은 것으로 이동하십시오.

 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("YourUrlHere")); startActivity(browserIntent);

Gaurav Lambole

String url = "https://www.thandroid-mania.com/"; if (url.startsWith("https://") || url.startsWith("http://")) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); }else{ Toast.makeText(mContext, "Invalid Url", Toast.LENGTH_SHORT).show(); }

해당 오류는 잘못된 URL로 인해 발생했습니다. Android OS는 데이터에 대한 작업 보기를 찾을 수 없습니다. 따라서 URL이 유효한지 여부를 확인했습니다.


Mayur Sojitra

나는 이것이 최고라고 생각한다.

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

Karthik Sridharan

이 방법은 메서드를 사용하여 고정된 입력 대신 모든 문자열을 입력할 수 있도록 합니다. 이렇게 하면 메서드를 호출하는 데 세 줄만 필요하므로 반복해서 사용하면 몇 줄의 코드를 절약할 수 있습니다.

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

이 방법을 사용하면 보편적으로 사용할 수 있습니다. IT는 다음과 같이 사용할 수 있으므로 특정 활동에 배치할 필요가 없습니다.

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

또는 액티비티 외부에서 시작하려면 액티비티 인스턴스에서 startActivity를 호출하기만 하면 됩니다.

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

이 두 코드 블록에서 볼 수 있듯이 null 검사가 있습니다. 인텐트를 처리할 앱이 없는 경우 null을 반환하기 때문입니다.

이 방법은 프로토콜이 정의되지 않은 경우 기본적으로 HTTP로 설정됩니다. SSL 인증서(HTTPS 연결에 필요한 것)가 없는 웹사이트가 있고 HTTPS를 사용하려고 하면 작동이 중지되기 때문입니다. . 모든 웹 사이트는 여전히 HTTPS로 강제 전환할 수 있으므로 해당 측에서는 어느 쪽이든 HTTPS로 이동합니다.


이 방법은 페이지를 표시하기 위해 외부 리소스를 사용하기 때문에 인터넷 권한을 선언할 필요가 없습니다. 웹 페이지를 표시하는 앱은 이를 수행해야 합니다.


Zoe

//온클릭 리스너

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

Faakhir

코틀린

 startActivity(Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(your_link) })

Cube

Anko 라이브러리 방법에서

 fun Context.browse(url: String, newTask: Boolean = false): Boolean { try { val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse(url) if (newTask) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } startActivity(intent) return true } catch (e: ActivityNotFoundException) { e.printStackTrace() return false } }

Vlad

출처 : http:www.stackoverflow.com/questions/2201917/how-can-i-open-a-url-in-androids-web-browser-from-my-application

반응형