Как не позволить пользователю использовать приложение после истечения срока действия? - PullRequest
3 голосов
/ 14 декабря 2011

В моем приложении я разрешаю пользователю покупать приложение на основе разных планов, таких как 2 часа бесплатно, 1 день, 1 неделя и т. Д.

Я не хочу, чтобы пользователь использовал приложение после истечения срока действия. Я создал сервис и установил будильник в основном действии, а в сервисе я сказал, что по истечении времени откройте основное действие.

Код установки будильника в основной деятельности:

private void updateService(){
        Intent myIntent = new Intent(DRMActivity.this, AlarmService.class);
        pendingIntent = PendingIntent.getService(DRMActivity.this, 0, myIntent, 0);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 30);
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

        Toast.makeText(DRMActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
    }

код услуги:

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        Intent myIntent = new Intent(getBaseContext(), DRMActivity.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Toast.makeText(this, "AlarmService.onStart()", Toast.LENGTH_LONG).show();

        getApplication().startActivity(myIntent);
    }

Пока все в порядке, даже если моя основная деятельность разрушена, служба может запустить ее снова. Но я думаю, что в Android, к сожалению, приложение построено из нескольких действий, поэтому из действия мы не можем остановить приложение. Что я имею в виду? У нас есть метод finish (), который прекращает действие, но не может закрыть все приложение. Следовательно, после прекращения действия приложения отобразится предыдущая активность этого приложения.

Итак, вернемся к моей истории. например, через 30 секунд (в соответствии с приведенным выше кодом) служба будет выполнять мою основную деятельность. Но что будет, если пользователь легко нажмет кнопку назад? он / она может вернуться к предыдущей активности приложения и продолжить его использование.

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

Что вы предлагаете? Есть ли способ запретить пользователю продолжать использовать приложение после истечения срока действия?

=======> UPDATE:

Для дальнейшего использования. Я использовал FLAG_ACTIVITY_CLEAR_TOP , и проблема решена. Теперь, даже пользователь нажимает кнопку «Назад», все действия между Основным действием и Последним действием очищаются. Согласно документации:

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

Например, рассмотрим задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity () с намерением, которое разрешается в компонент деятельности B, то C и D будут завершены, и B получит заданное намерение, в результате чего стек теперь равен: A, B.

1 Ответ

0 голосов
/ 14 декабря 2011

Три возможности:

  1. Переопределить onBackPressed(), чтобы ничего не делать.
  2. Удалите это Activity из заднего стека, добавив flag для FLAG_ACTIVITY_NO_HISTORY к Intent, который изначально его запустил.
  3. Зафиксируйте некоторые данные в SharedPreferences и проверьте их в onResume, когда пользователь вернется. Если данные говорят, что срок их действия истек, отключите все функции, которые вы хотите.
...