ここでは、画面がオフになってから50秒後にstartDiscoveryProcess()
に電話をかけ、startDiscoveryProcess()
が50秒ごとに自分自身を呼び出しているということです。そのプロセスを止めるには? Intent.ACTION_SCREEN_ON
を聞いて、画面がオンの場合は、ブロードキャストを送信して再度検出を開始しません。
あなたのサービスの
onCreate()
で
boolean screenOn = true;
BroadcastReceiver screenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals("MY_ACTION_WHEN_SCREEN_IS_OFF")) {
screenOn = false;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// start discovery process again
startDiscoveryProcess();
}
}, 50000);
} else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOn = true;
}
}
};
、レシーバを登録します。
IntentFilter filters = new IntentFilter();
filters.addAction(Intent.ACTION_SCREEN_OFF);
filters.addAction(Intent.ACTION_SCREEN_ON);
filters.addAction("MY_ACTION_WHEN_SCREEN_IS_OFF");
registerReceiver(screenReceiver, filters);
それからちょうど、我々は上記と呼ばれるメソッドを持っていることを確認してください。
void startDiscoveryProcess() {
//start discovery process
// do something...
// then send the broadcast yourself to do this every 50 seconds because discovery stops at 60 seconds
if(!screenOn) {
Intent intent = new Intent("MY_ACTION_WHEN_SCREEN_IS_OFF");
sendBroadcast(intent);
}
}