AndroidシールドBackキー、傍受ホームキー
4658 ワード
アプリが入るとフラッシュページが見えます.このフラッシュページは簡単ですが、フラッシュページは一般的に戻りキーを遮断し、ホームキーを傍受する必要があります.なぜそう考える必要がありますか.まずコードを見ましょう.
SplashActivity
コードを見ると、new Thread()のときにサブスレッドが作成され、すぐに戻るキーを押すかhomeキーを押すと(2秒を超えない)、プログラムは終了しますが、このスレッドは終了せず、実行されています.では、このときMainActivivtyにジャンプしますが、ユーザーがそれを見たら、退屈ではないでしょうか.どうやってこの問題を解決しますか?一般的にフラッシュページを作るには、戻りキーを遮断し、ホームキーを監視する必要があります.
KeyEvent.KEYCODE_ホームという方法はまったく役に立たず、ホームキーを傍受できない.ホームキーを傍受するときは、ブロードキャスト傍受がホームキーを押すかどうかを登録する必要があります.
ホームキーの傍受:
//プログラムが破棄された場合、この放送を抹消する
もしみんながどこが間違っていると思ったら、反映して、みんなで一緒に勉強します.
転載は出典を明記してください!
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);
}
もしみんながどこが間違っていると思ったら、反映して、みんなで一緒に勉強します.
転載は出典を明記してください!