1

webView에서 작동하도록 Android 휴대 전화의 하드웨어 키를 가져 오는 데 문제가 있습니다. 다음은 내가 사용하고있는 코드입니다. 앱을 실행할 때마다 강제로 닫힙니다. 당신이 너무 늦게 키 이벤트를 잡으려고 노력안드로이드 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

뒤로 버튼 조작으로 기본 웹뷰를 만드는 방법은 http://developer.android.com/guide/tutorials/views/hello-webview.html을 참조하십시오. –

답변

2

여기에 내 생각이다. 웹뷰에 오기 전에 잡아야합니다. 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; 
     } 
    }); 

내가 그것을 더 그 단지 '블록'을 할 수 없습니다 - 그것은 내가 다른 질문에서 찾을려고 내용은 다음과 같습니다

여기 방법입니다. BACK ON

최저

-Yaakov

0

링크는 웹보기 안에 webview.setWebViewClient을 유지 // 그래서

누르면 (새 WebViewClient());

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; 
    } 
});