1

アンドロイドフォンのハードウェアキーをWebViewで使用するには問題があります。以下は、私が使用しているコードです。私はアプリを実行するたびに強制的に閉じます。あなたが遅すぎるキーイベントをキャッチしようとしているアンドロイドウェブビューの戻るボタン?

package com.knowideas.transithub; 
import android.app.Activity; 

import android.os.Bundle; 

import android.os.Handler; 

import android.util.Log; 

import android.view.KeyEvent; 

import android.webkit.WebChromeClient; 

import android.webkit.WebSettings; 

import android.webkit.WebView; 

import android.webkit.WebViewClient; 

public class WebViewDemo extends Activity { 

    private static final String LOG_TAG = "WebViewDemo"; 

    private WebView mWebView; 

    private Handler mHandler = new Handler(); 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // Check if the key event was the BACK key and if there's history 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     // If it wasn't the BACK key or there's no web page history, bubble up to the default 
     // system behavior (probably exit the activity) 
     return super.onKeyDown(keyCode, event); 
    } 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     mWebView = (WebView) findViewById(R.id.webView); 

     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setSavePassword(false); 
     webSettings.setSaveFormData(false); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(false); 

     mWebView.setWebChromeClient(new WebChromeClient()); 

     mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); 

     mWebView.loadUrl("file:///android_asset/demo.html"); 
    } 

    final class DemoJavaScriptInterface { 

     DemoJavaScriptInterface() { 
     } 

     /** 
     * This is not called on the UI thread. Post a runnable to invoke 
     * loadUrl on the UI thread. 
     */ 
     public void clickOnAndroid() { 
      mHandler.post(new Runnable() { 
       public void run() { 
        mWebView.loadUrl("javascript:wave()"); 
       } 
      }); 

     } 
    } 
} 
+0

logcatとは何ですか?スローされる例外は何ですか? – Otra

+0

LogCatの出力を追加する – Jayp

+0

戻るボタン操作で基本的なWebviewを作成する方法については、http://developer.android.com/guide/tutorials/views/hello-webview.htmlを参照してください。 –

答えて

2

は、ここに私の推測です。それはwebviewになる前にそれをつかむ必要があります。これは、onKeyListenerを設定することで行います。

mWebView.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
        // ignore the back key 
       return true; 
      } 
      // process normally 
      return false; 
     } 
    }); 

が、私はそれをより多くのこと単に「ブロック」を実行することはできません - それは私が別の質問で見つけるためにしようとしているものです:

はここに方法です。

ベスト

リンクはWebViewの webview.setWebViewClient(新WebViewClient())の内側にとどまるのでBACK ON -Yaakov

0

は//

を押しました。

webview.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      WebView webView = (WebView) view; 

      switch (keyCode) { 
       case KeyEvent.KEYCODE_BACK: 
        if (webView.canGoBack()) { 
         webView.goBack(); 
         return true; 
        } 
        break; 
      } 
     } 
     return false; 
    } 
});