2012年6月6日水曜日

Home,Backキーが押されたときの処理

Backキーが押されたとき


Backキーが押されると、Activityが終了してしまう。誤操作を防止したいので・・・・
Backキーを禁止するには、


   //BACKキー禁止
   @Override
   public boolean dispatchKeyEvent(KeyEvent event) {
       if (event.getAction()==KeyEvent.ACTION_DOWN) {
           switch (event.getKeyCode()) {
           case KeyEvent.KEYCODE_BACK:
               return true; //trueでActivityを終了しない
           }
       }
       return super.dispatchKeyEvent(event);
   }

終了していいか確認する


    //BACKキーで終了確認
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction()==KeyEvent.ACTION_DOWN) {
            switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_BACK:
                // 終了していいか、ダイアログで確認
             showDialog(WBsetActivity.this,"終了","終了してもよろしいですか");
                return true; 
            }
        }
        return super.dispatchKeyEvent(event);
    }
  //ダイアログ

    private void showDialog(Context context,String title,String text) {
        AlertDialog ad=new AlertDialog.Builder(this)
        .setTitle(title)
        .setMessage(text)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
        finish(); //終了
        }
        })
        .setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
       
        }
        })

        .show();
    }







HOMEキーが押されたとき

HOMEキーが押されたことはキャッチできるが、HOME画面に戻るのは阻止できない。
Activityが中断されたまま残るのが困るときはどうする?
強制的にActivityを終了させるしかない。

    @Override
    public void onCreate(Bundle savedInstanceState) {

//HOMEキーが押されたときのレシーバ設定
HomeButtonReceive m_HomeButtonReceive = new HomeButtonReceive();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
this.registerReceiver(m_HomeButtonReceive, iFilter);

}

    //HOMEボタンで終了する。
public class HomeButtonReceive extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1){
Toast.makeText(getApplicationContext(), "終了" ,Toast.LENGTH_SHORT).show();
finish();
}
}

0 件のコメント:

コメントを投稿