Cordova for androidはAppでbuttonイベントを終了する方法を処理します

3261 ワード

プロジェクトはHTML 5 Android Appに返却キーの処理を追加する必要があり、Activityに直接返却キーを付ける処理コードが機能しないことを発見した.cordovaソースコードを分析すると、返却キーはWebViewで処理されていることが分かったので、jsで返却キーを処理できるだけだ.
 @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (exit > 1) {
				finish();
			} else {
				Toast.makeText(this, R.string.toast_exit, Toast.LENGTH_SHORT)
						.show();
				exit++;
			}
			return true;
		} else {
			return super.onKeyDown(keyCode, event);
		}
	}
CordovaActivityを継承したActivityでは、上記のコードは機能しません.WebViewは戻りキーイベントを処理し、Activityを終了しているためです.
  /*
     * Android 2.x needs to be able to check where the cursor is.  Android 4.x does not
     * 
     * (non-Javadoc)
     * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
     */
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        //Determine if the focus is on the current view or not
        if (appView != null && appView.getFocusedChild() != null && (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) {
                    return appView.onKeyDown(keyCode, event);
        }
        else
            return super.onKeyDown(keyCode, event);
    }
    
    
CordovaActivityソースコードの戻りキー処理コード
以下のコードは、後退buttonに応答し、ユーザーに再度クリックして終了するように促すことができます.3秒後にクリックしなかったと仮定すると登録イベントが再開される.注意:window.plugins.ToastPlugin.show_short()はtoastメッセージを表示するプラグインです!コード:
//     PhoneGap
document.addEventListener("deviceready", onDeviceReady, false); 
// PhoneGap    
function onDeviceReady() {
//    
document.addEventListener("backbutton", eventBackButton, false); //   
document.addEventListener("menubutton", eventMenuButton, false); //   
document.addEventListener("searchbutton", eventSearchButton, false); //   
}

//   
function eventBackButton(){
//confirm("       !");
window.plugins.ToastPlugin.show_short('       !');
document.removeEventListener("backbutton", eventBackButton, false); //     
    //3       
    var intervalID = window.setInterval(
        function() {
           window.clearInterval(intervalID);
           document.addEventListener("backbutton", eventBackButton, false); //   
        },
        3000
   );
}
//   
function eventMenuButton(){
    window.plugins.ToastPlugin.show_short('         !');
}
//   
function eventSearchButton(){
    window.plugins.ToastPlugin.show_short('         !');
}