Управление сессиями приложений Android - PullRequest
1 голос
/ 19 октября 2011

Я должен вести статистику на основе сессии в моем приложении. Проблема в том, что android никогда не закрывает приложение, даже когда пользователь выходит из приложения с помощью кнопки «назад» (возможно, потому что я запускаю службы в фоновом режиме).

Я хотел бы сбросить информацию о сеансе, если приложение находится в фоновом режиме, например, в течение X минут (чтобы отличить его от, например, телефонного звонка или будильника). Есть ли способ сделать это?

Может быть, какой-то приемник вещания, чтобы обнаружить событие ...?

Позвольте мне попытаться объяснить сценарий немного. Эта часть моего приложения доступна только после аутентификации (ввода пароля). Теперь, когда пользователь находится внутри этой части, я не хотел бы продолжать запрашивать у пользователя аутентификацию каждый раз, когда действие приостанавливается. Но, скажем, пользователь нажимает клавишу Home и возвращается в приложение, скажем, через 20 минут, я хотел бы попросить аутентификацию.

РЕДАКТИРОВАТЬ: я работаю с несколькими действиями, поэтому я не могу обнаружить приложение, уходящее в фон, просто установив флаг в onPause().

Ответы [ 2 ]

4 голосов
/ 19 октября 2011
private static boolean isApplicationGoingToBackground(final Context context) {

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }

        return false;
    }

Позвоните в onStop. onStop вызывается после onStart того, что захватывает весь экран - если это действие в том же пакете apk, то вы не переходите в фоновый режим. Для этого требуется разрешение GET_TASKS, и если действие появляется без вашего возврата, оно все равно сработает (пользователь выбирает что-то из панели уведомлений или что-то в этом роде).

Или связать со службой onStart и отменить привязку onStop - служба будет затем уничтожена, когда все ваши действия будут остановлены (или отследит связывание против отмены привязки, если вы не хотите полагаться на вызов onDestroyed - потому что это может не произойти .. ).

0 голосов
/ 19 октября 2011

Я не совсем уверен, но я думаю, что ваше приложение закрывается, когда пользователь существует приложение, используя кнопку «Назад» (если вы не ловите его для чего-то другого или если другие фоновые службы работают в фоновом режиме, которые используют тот же параметр сеанса .

В любом случае ...

Чтобы ответить на ваш вопрос, есть два простых способа сделать то, что вы хотели сделать:

  1. Попробуйте Flurry . Это делает работу действительно хорошо. Или Google Analytics для мобильных устройств, они все довольно просты в использовании и справляются с ними для вас.

  2. Если вы хотите выполнить проверку фона, просто запишите SharedPreference в блоке onPause () действия, обновите его, когда появится новый экран, являющийся частью вашего приложения, и в то же время проверьте, старый уже истек (это произойдет в onResume ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...