Also, was passiert hier ist, dass Sie startDiscoveryProcess()
50 Sekunden nach dem Ausschalten des Bildschirms anrufen und startDiscoveryProcess()
ruft sich selbst alle 50 Sekunden. Wie man diesen Prozess stoppt? Sie hören auf Intent.ACTION_SCREEN_ON
und wenn der Bildschirm eingeschaltet ist, senden wir die Übertragung nicht, um die Erkennung erneut zu starten.
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;
}
}
};
In onCreate()
Ihrer Dienstleistung, registrieren Sie den Empfänger:
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);
Dann nur sicherstellen, dass die Methode haben wir oben genannt:
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);
}
}