AndroidシールドBackキー、傍受ホームキー

4658 ワード

アプリが入るとフラッシュページが見えます.このフラッシュページは簡単ですが、フラッシュページは一般的に戻りキーを遮断し、ホームキーを傍受する必要があります.なぜそう考える必要がありますか.まずコードを見ましょう.
SplashActivity
public class SplashActivity extends Activity {
    private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        //    
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash);
        //     
        registerReceiver(mHomeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));  
        new Thread(new Runnable() {
            @Override
            public void run() {
                handler.sendEmptyMessageDelayed(0x1, 2000);         
            }
        }).start();         
        handler=new Handler(){
            public void handleMessage(android.os.Message msg) {
                if(msg.what==0x1){
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    SplashActivity.this.finish();
                }

            };
        };

    }

コードを見ると、new Thread()のときにサブスレッドが作成され、すぐに戻るキーを押すかhomeキーを押すと(2秒を超えない)、プログラムは終了しますが、このスレッドは終了せず、実行されています.では、このときMainActivivtyにジャンプしますが、ユーザーがそれを見たら、退屈ではないでしょうか.どうやってこの問題を解決しますか?一般的にフラッシュページを作るには、戻りキーを遮断し、ホームキーを監視する必要があります.
   //     
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            return true;
        }
        return false;
    }

KeyEvent.KEYCODE_ホームという方法はまったく役に立たず、ホームキーを傍受できない.ホームキーを傍受するときは、ブロードキャスト傍受がホームキーを押すかどうかを登録する必要があります.
ホームキーの傍受:
private final BroadcastReceiver mHomeKeyEventReceiver  = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            //Intent.ACTION_CLOSE_SYSTEM_DIALOGS     home 
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
               //    ,    
                System.exit(0);  
            }
        }
    };

//プログラムが破棄された場合、この放送を抹消する
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(mHomeKeyEventReceiver);      
    }

もしみんながどこが間違っていると思ったら、反映して、みんなで一緒に勉強します.
転載は出典を明記してください!