2010-11-01 5 views
84

तो अभी मेरे ऐप में जिस यूआरएल का उपयोग मैं कर रहा हूं, उसका रीडायरेक्ट है, और जब ऐसा होता है तो वेबव्यू मेरे नए रहने के बजाए एक नया ब्राउजर खोल देगा। एप्लिकेशन। क्या कोई तरीका है कि मैं सेटिंग्स बदल सकता हूं ताकि दृश्य सामान्य जैसे यूआरएल पर रीडायरेक्ट हो जाए, लेकिन नया ऐप खोलने के बजाय मेरे ऐप में रहें?एंड्रॉइड वेबव्यू, ब्राउजर खोलने के बजाए ऐप में रीडायरेक्ट को कैसे संभालें

संपादित करें:

मैं पुन: निर्देशित यूआरएल चाहते हैं, मैं सिर्फ यह कैसे बनाया जाता है, तो है कि URL ही एक मैं चाहता हूँ करने के लिए एक रीडायरेक्ट का कारण होगा के माध्यम से है एक ही रास्ता पाने के लिए पता नहीं है।

उदाहरण के लिए: जब आप यहां जाएं: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 ध्यान दें कि यह वास्तविक उत्पाद पर यूआरएल को कैसे रीडायरेक्ट करेगा। मेरे ऐप में, अगर मैं इसे एक नए ब्राउज़र में खोलता हूं, तो यह ठीक होगा, हालांकि अगर मैं इसे अपने ऐप में वेबव्यू के साथ रखता हूं, तो यह दिखाएगा कि यह के = 9780735622777 की खोज कर रहा है, जैसे: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0। या, यह ब्राउज़र में दृश्य खुल जाएगा और दिखाएगा कि क्या उचित है। हालांकि, मैं अपने ऐप में सबकुछ रखना चाहता हूं।

उत्तर

206

एक वेब व्यू क्लाइंट बनाएं, और shouldOverrideUrlLoading विधि को ओवरराइड करें।

webview.setWebViewClient(new WebViewClient() { 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 
     // do your handling codes here, which url is the requested url 
     // probably you need to open that url rather than redirect: 
     view.loadUrl(url); 
     return false; // then it is not handled by default action 
    } 
}); 
+0

अगर मैं लोडिंग यूआरएल को नहीं जानता तो यह कैसे काम करेगा? – James

+0

संपादित उत्तर पढ़ें। – xandy

+4

पूरी तरह से काम करता है, इसके लिए धन्यवाद :) – craigp

12

आधिकारिक documentation के अनुसार, WebView में किसी भी लिंक पर क्लिक एक आवेदन है कि यूआरएल को संभालती है, जो डिफ़ॉल्ट रूप से एक ब्राउज़र है की शुरूआत। आप ओवरराइड करने के लिए इस

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return false; 
     } 
    }); 
+4

यहां तक ​​कि बेहतर है बस myWebView.setWebViewClient (नया WebViewClient()) पर कॉल करें; ShouldOverrideUrlLoading का डिफ़ॉल्ट कार्यान्वयन गलत लौटाता है। – cyroxis

6

तरह डिफ़ॉल्ट व्यवहार बस एक डिफ़ॉल्ट कस्टम WebViewClient करना होगा जोड़ने की जरूरत है। इससे WebView किसी लोड किए गए यूआरएल को स्वयं संभालता है।

mWebView.setWebViewClient(new WebViewClient()); 
1

एक वर्ग है कि webviewclient लागू करता है बनाएँ और निम्न कोड यूआरएल स्ट्रिंग ovveriding की अनुमति देता है कि जैसा कि नीचे दिखाया जोड़ें। आप इन example

public class myWebClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 

अपने निर्माता पर देखते हैं, जैसा कि नीचे दिखाया वेब दृश्य वस्तु बना सकते हैं।

web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

फिर अपने एप्लिकेशन के यूआरएल की लोडिंग प्रदर्शन करने के लिए निम्न कोड जोड़

 WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    web.loadUrl("http://www.facebook.com"); 
    web.setWebViewClient(new myWebClient()); 

web.setWebChromeClient(new WebChromeClient() { 
     // 
     // 
    } 

Download demo

4

आप अपने वेब दृश्य के लिए अधिभावी shouldOverrideUrlLoading विधि अपने कस्टम WebviewClient सेट करना होगा यूआरएल लोड करने से पहले।

mWebView.setWebViewClient(new WebViewClient() 
     { 
      @SuppressWarnings("deprecation") 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView webView, String url) 
      { 
       return shouldOverrideUrlLoading(url); 
      } 

      @TargetApi(Build.VERSION_CODES.N) 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request) 
      { 
       Uri uri = request.getUrl(); 
       return shouldOverrideUrlLoading(uri.toString()); 
      } 

      private boolean shouldOverrideUrlLoading(final String url) 
      { 
       Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url); 

       // Here put your code 

       return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false. 
      } 
     }); 

चेकआउट डाउनलोड बिना यूआरएल और खुले पीडीएफ, रीडायरेक्ट कर वेबव्यू में से निपटने के लिए उदाहरण कोड। https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

+0

ध्यान दें कि एक उदाहरण कोड के लिए उपरोक्त लिंक मौजूद नहीं है। – Jetdog

+0

मैंने लिंक अपलोड किया है। –

संबंधित मुद्दे