Как отследить запуск приложения - PullRequest
0 голосов
/ 02 марта 2020

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

1 Ответ

0 голосов
/ 03 марта 2020

Попробуйте это

Второй вариант заключается в создании класса, расширяющего Application с помощью флага, например isAppRunning, который будет иметь значение true или false, если ваше приложение находится на переднем плане. или нет:

   public class MyAppContext extends Application {

   public boolean isAppRunning = true;

   public void setIsAppRunning(boolean v){
      isAppRunning = v;
   }

   public boolean isAppRunning(){
      return isAppRunning;
   }

}

Затем в вашем AndroidManifest. xml вы должны добавить этот класс, чтобы он использовался при запуске вашего приложения. Просто добавьте android: name = ". MyAppContext" под тегом приложения:

<application
        android:name=".MyAppContext"

Теперь в каждом вашем действии вы должны переопределить onResume () и onPause () и установить для флага соответствующий значение:

class BaseActivity extends Activity {
    @Override
    protected void onResume() {
        super.onResume();
        ((MyAppContext)getApplication()).setIsAppRunning(true);
    }

    @Override
    protected void onPause() {
        ((MyAppContext)getApplication()).setIsAppRunning(false);
        super.onPause();
    }
}

Таким образом, при каждом запуске действия значение isAppRunning в MyAppContext будет иметь значение true, при выходе из действия оно будет иметь значение false, но если откроется другое действие (например, если вы нажали кнопка «назад», чтобы вы вернулись к предыдущему действию) значение снова сразу станет истинным.

Когда вы окончательно завершите sh все ваши действия, ни один из методов onResume () не будет вызван, и все onPause () будут вызваны методы, поэтому isAppRunning будет иметь значение false, и вы знаете, что ваша активность больше не находится на переднем плане.

Так что возобновите, если isAppRunning имеет значение true, ваше приложение находится на переднем плане (запустите отслеживание сеанса), в противном случае это ушел (остановите отслеживание сеанса). Вы можете создать Timer в классе MyAppContext, чтобы периодически проверять значение isAppRunning, поэтому оно будет:

public class MyAppContext extends Application {

   public boolean isAppRunning = true;
   public final int timerRate = 500;    // Execute timer task every 500mS

   public void setIsAppRunning(boolean v){
      isAppRunning = v;
   }

   public boolean isAppRunning(){
      return isAppRunning;
   }

   @Override
   public void onCreate() {
      super.onCreate();
      Timer mTimer = new Timer();

      mTimer.scheduleAtFixedRate(new TimerTask() {
         @Override
         public void run() {
            if(isAppRunning) startSesionTracking();
            else stopSesionTracking();
         }
      }, 0, REFRESH_TIME);
   }

   private void startSesionTracking () { ... };
   private void stopSesionTracking () { ... };

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