#java #android #android-service
#java #Android #android-сервис
Вопрос:
В моем приложении запущена служба для обнаружения встряхивания, однако в моем MainActivity у меня есть кнопка для выхода пользователя из системы, с помощью которой я должен выйти из системы и завершить работу службы, которая обнаруживает событие встряхивания.
мой метод выхода из системы в моем MainActivity:
public void signOutAndFinish(){
//Stop Shakeservice
Intent intent = new Intent(this, ShakeService.class);
stopService(intent);
//Go to login activity
Intent iLoginView = new Intent(this, LoginActivity.class);
startActivity(iLoginView);
}
однако, если я встряхну свое устройство после выхода из системы, служба распознает встряску, как будто она не убьет его немедленно:
Intent intent = new Intent(this, ShakeService.class);
stopService(intent);
Код в методе onDestroy является:
@Override
public void onDestroy() {
super.onDestroy();
}
Как я могу завершить работу службы, чтобы при выходе из системы служба умирала?
Спасибо за вашу помощь!
Ответ №1:
Вы можете отправить широковещательную рассылку о своей активности в onDestroy()
методе вашего сервиса, а затем выполнить выход из системы.
Вот несколько примеров кода вышеупомянутой идеи:
Это для вашего сервиса:
@Override
public void onDestroy() {
super.onDestroy();
Intent intent = new Intent();
intent.setAction("com.example.broadcast.MY_NOTIFICATION");
intent.putExtra("data","Notice for logout!");
sendBroadcast(intent);
}
И это для вашей активности:
private BroadcastReceiver br = new MyBroadcastReceiver();
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter("com.example.broadcast.MY_NOTIFICATION");
registerReceiver(br, filter);
}
@Override
public void onDestroy() {
unregisterReceiver(br);
}
// An inner class at your activity
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
YourActivity.this.finish();
// or do anything you require to finish the logout...
}
}
Ответ №2:
однако, если я встряхну свое устройство после выхода из системы, служба распознает встряску
Тогда, по-видимому, вы не очистили свои Sensor
данные в onDestroy()
методе службы.
Как я могу завершить работу службы, чтобы при выходе из системы служба умирала?
Вы делаете это сейчас. Однако, если вы что-то настроили в службе, например, прослушивание событий из SensorManager
, вам нужно это очистить, обычно в onDestroy()
службе.