2014-02-13 5 views
1

Я хотел бы открыть ссылки в браузерах с помощью хоста example.com или example.de в моем приложении Android с веб-просмотром.
Я создал это намерение:Открыть ссылку с браузера в Android Webview

<intent-filter> 
    <data android:scheme="https" android:host="example.com" /> 
    <data android:scheme="https" android:host="example.de" /> 
    <data android:scheme="http" android:host="example.com" /> 
    <data android:scheme="http" android:host="example.de" /> 

    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

По умолчанию WebView загружает URL example.com, вот мой OnCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.activity_main); 

    final ProgressDialog pd = ProgressDialog.show(this, "", "Loading...", true); 

    mWebView = (WebView) findViewById(R.id.activity_main_webview); 

    // Enable Javascript 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    // Stop local links and redirects from opening in browser instead of WebView 
    mWebView.setWebViewClient(new MyAppWebViewClient()); 

    mWebView.setWebViewClient(new WebViewClient() { 

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

     @Override 
     public void onPageFinished(WebView view, String url) { 
      if (pd.isShowing() && pd != null) { 
       pd.dismiss(); 
      } 
     } 
    }); 

    mWebView.loadUrl(url); 
} 

Это мой shouldOverrideUrlLoading():

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     if(Uri.parse(url).getHost().endsWith("example.com") || Uri.parse(url).getHost().endsWith("example.de")) { 
      return false; 
     } 

     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     view.getContext().startActivity(intent); 
     return true; 
    } 

Теперь я застрял. Если вы нажмете на URL-адрес example.com/otherurl.php в веб-браузере, приложение откроется, но загрузите URL-адрес по умолчанию example.com. Как я могу открыть приложение и загрузить example.com/otherurl.php вместо example.com?

я уже читал here, что мне нужен этот кусок кода, чтобы получить URL:

Uri data = getIntent().getData(); 
String extUrl = data.toString(); 

Но где я должен реализовать этот код? Thanks

ответ

2

extUrl будет содержать URL для открытия. Так что вы должны сделать что-то вроде этого, где вы назвали loadUrl():

Uri data = getIntent().getData(); 

if (data != null) { 
    mWebView.loadUrl(data.toString()); 
} else { 
    mWebView.loadUrl(url); 
} 

Так что вы говорите здесь, что если браузер послал вам URL, данные не будут нулевыми, так запустить WebView с этим адрес. В противном случае, если данные не содержат адрес и имеют значение null, запустите свой адрес по умолчанию (переменная url).

+0

Хм, это слишком просто ^^ Я думал, что я уже пробовал это ... Большое спасибо, это работает отлично! –

Смежные вопросы