Определите, было ли приложение закрыто без использования OnStop()
Что я хочу сделать, это отправить запрос на выход из системы на мой сервер, когда пользователь выйдет из моего приложения (это может произойти во время любого действия, их много).
Кажется, я не могу использовать OnStop()
как у меня есть выбор галереи и камеры Intent и когда они запускаются, OnPause
а также OnStop
называются. Мне нужен способ окончательно знать, что приложение закрыто.
Я прочитал об использовании Service
/BroadcastReceiver
или даже LocalBroadcastManager
или, возможно, связывание запроса с нажатием кнопки home.
Я не могу проверить, было ли приложение отправлено в фоновый режим, поскольку это будет верно для запуска камеры / галереи, а также для отправки приложения в фоновый режим. Я также попытался проверить имя пакета запускаемой деятельности, но это может быть переменной на других устройствах (например, галерея может иметь другое имя пакета).
Любой совет / направление высоко ценится.
Изменить: я обнаружил, что на самом деле нет способа перехватить нажатие кнопки домой. Все еще ищу решение!
1 ответ
У меня была похожая проблема, подобная этой, я использовал Службу для решения своей проблемы. Это то, что я сделал
В основной деятельности
ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder binder) {
((KillingNotificationBar.KillBinder) binder).service.startService(new Intent(
Main.this, KillingNotificationBar.class));
}
public void onServiceDisconnected(ComponentName className) {
}
};
bindService(new Intent(Main.this,
KillingNotificationBar.class), mConnection,
Context.BIND_AUTO_CREATE);
Класс KillingNotificationBar
public class KillingNotificationBar extends Service {
private final IBinder mBinder = new KillBinder(this);
public class KillBinder extends Binder {
public final Service service;
public KillBinder(Service service) {
this.service = service;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
you will know if the activity is destroyed
}
}
добавить это в свой манифест
<service android:name=".services.KillingNotificationBar"/>
Примечание. Выполнение займет 1-5 секунд.