さて、私はデバイスのすべてのハードボタンを無効にしたいことをしています。
電源、ホーム、音量アップ、音量ダウン、検索、戻るなどのハード ボタン。
ここで、電源を除くほとんどすべてのボタンを正常にオーバーライドしました。
ですから、皆さんに見てもらい、いくつかのアイデアを共有してもらい、私がそれを回避できるようにしてください.
同じの短いクリックをキャッチしたいのと同じように、長押しのPowerキーイベントを取得しています。onDispatchKeyEvent()
また、電源を押すと、私もオフの取得で画面オフを停止しようとしましたが、受信には成功しましたが、処理できませんでした。Broadcast
SCREEN_OFF
ありがとう。
次に、画面のオン/オフのブロードキャストを受信するReceiverScreenを作成しました
ReceiverScreen.java
public class ReceiverScreen extends BroadcastReceiver {
public static boolean wasScreenOn = true;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// do whatever you need to do here
wasScreenOn = false;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// and do whatever you need to do here
wasScreenOn = true;
}
}
}
DisableHardButton.java
public class DisableHardButton extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ReceiverScreen();
registerReceiver(mReceiver, filter);
}
@Override
protected void onPause() {
// when the screen is about to turn off
if (ScreenReceiver.wasScreenOn) {
// this is the case when onPause() is called by the system due to a screen state change
System.out.println("SCREEN TURNED OFF");
} else {
// this is when onPause() is called when the screen state has not changed
}
super.onPause();
}
@Override
protected void onResume() {
// only when screen turns on
if (!ScreenReceiver.wasScreenOn) {
// this is when onResume() is called due to a screen state change
System.out.println("SCREEN TURNED ON");
} else {
// this is when onResume() is called when the screen state has not changed
}
super.onResume();
}
}