2017-05-09 8 views
0

私のアプリにはWebViewがあり、そこにサーバーからウェブサイトを読み込みます。他のアプリにつながるはずのボタンがあり、ロードされたウェブサイト上webViewのアンドロイドアプリを別のアンドロイドアプリ内に開きます

  1. : 2例があります。私はそれがthisのように処理することができます知っている:

    <a href = "intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Click me </a> 
    

が、これは(唯一のスタンドアロンのブラウザで)WebViewのでは動作しません!私はshouldOverrideUrlLoadingでそれを処理しようとし、Intentで外部ブラウザにリダイレクトしようとしましたが、 "intent://" URLのURIは認識されず開けません。

  1. サーバーから取得するリンクは「インテント」リンクです。

両方の場合の動作が同じである必要があります。アプリがインストールされている場合はアプリを開き、開いていない場合はGoogle Playをダウンロードします。

これを行う方法はありますか?

+0

多分これは助けることができますhttp://stackoverflow.com/questions/33151246/how-to-handle-intent-on-a-webview-url – vineetv

答えて

0

これが最善の選択肢かどうかはわかりませんが、@vineetvが提案したのと似ています。この方法はshouldOverrideUrlLoading()と呼ばれ、

private void handleNewUrl(String url) { 
    Uri uri = Uri.parse(url); 

    if (uri.getScheme().equals("http") || uri.getScheme().equals("https")) 
     openExternalWebsite(url); 
    else if (uri.getScheme().equals("intent")) { 
     String appPackage = getAppPackageFromUri(uri); 

     if (appPackage != null) { 
      PackageManager manager = getContext().getPackageManager(); 
      Intent appIntent = manager.getLaunchIntentForPackage(appPackage); 

      if (appIntent != null) { 
       getActivity().startActivity(appIntent); 
      } else { 
       openExternalWebsite("https://play.google.com/store/apps/details?id=" + appPackage); 
      } 
     } 
    } 
} 

private String getAppPackageFromUri(Uri intentUri) { 
    Pattern pattern = Pattern.compile("package=(.*?);"); 
    Matcher matcher = pattern.matcher(intentUri.getFragment()); 

    if (matcher.find()) 
     return matcher.group(1); 

    return null; 
} 

private void openExternalWebsite(String url) { 
    Intent webeIntent = new Intent(Intent.ACTION_VIEW); 
    webeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    webeIntent.setData(Uri.parse(url)); 
    getActivity().startActivity(webeIntent); 
} 

と思われます。しかし、よりよい解決策があれば教えてください!

関連する問題