Определите, было ли приложение закрыто без использования 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 секунд.

Другие вопросы по тегам