질문자 :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));
kenju2.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 developerWebview를 사용하여 동일한 응용 프로그램의 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 }
GiboltWebview를 사용하여 애플리케이션에서 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 Sharmatry 블록 내에 다음 코드를 붙여넣고 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*/ }
UmasankarString 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 메서드에 이것을 사용했기 때문에 액티비티에서 이 작업을 수행하는 경우 필요하지 않습니다.
bopolIntent getWebPage = new Intent(Intent.ACTION_VIEW, Uri.parse(MyLink)); startActivity(getWebPage);
Abhishek BalaniMarkB 님의 답변이 맞습니다. 제 경우에는 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" />
stacktryMark 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); } }
divonasandroid.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 LamboleString 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) })
CubeAnko 라이브러리 방법에서
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