1

Webビューがあり、バナーをクリックすると、Intent.ACTION_VIEWを送信して、ブラウザーまたはユーザーが次のように適切と判断したものを開きます。

  w.setWebViewClient(new WebViewClient(){
         @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
             if (url != null && url.startsWith("http://")) {
                    view.getContext().startActivity(
                        new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                } else {

                    return false;
                }


            }

     });

ここで私が欲しいのは、ユーザーがブラウザーを開く前に戻るボタンを押しただけなのか、実際にブラウザーを開いたのかを知る方法を見つけることです。私はこの質問を見つけましたが、そこには解決策がありません

4

2 に答える 2

2

使用するベストプラクティスではないかもしれないことを1つ実行できますが、これで問題が解決すると思います

初期化 => boolean isPageLoading = false;

webview.setWebViewClient(new WebViewClient() {  
 public boolean shouldOverrideUrlLoading(WebView view, String url)  {                  

            return true;    
        }

        public void onPageFinished(WebView view, String url) {
            isPageLoading = false;             
        }
       public void onPageStarted(WebView view, String url, Bitmap favicon){
            isPageLoading = true;
        }
    });  

これで、ページがロードされているかどうかを示す適切なインジケーターができました。

アクティビティで、戻るキーを押すイベントをオーバーライドします

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { // Back key pressed
                    if(isPageLoading){
                       // Do the tasks you want to do when page is loading
                    }else{
                       // Do the tasks you want to do when page loading is finished (or not in progress)
                     }
        return true;
    }
    return super.onKeyDown(keyCode, event);
  }

さまざまなステータス情報 (ページの読み込みが開始されたかどうかなど) を示すブール変数を追加することで、この機能の動作を変更できることに注意してください。

これがあなたが提起した問題を解決することを願っています

于 2012-12-10T10:43:33.007 に答える
1

別の可能な解決策:startActivityForResult(intent, 1)の代わりに使用して、次のようstartActivity(intent)に確認しrequestCodeますresultCode

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1) {
        //intent 1 was
        if(resultCode == Activity.RESULT_OK) {
             //successful
        } else {
             //not succusseful
        }
    }
}

これは、ほとんどの種類のインテント (メール、カメラなど) で機能します。

于 2013-04-16T08:05:08.990 に答える