Как я должен перезапускать свое приложение для Android каждый раз, когда экран заблокирован? - PullRequest
0 голосов
/ 18 октября 2019

Я хочу перезапускать свое приложение Android каждый раз, когда пользователь нажимает кнопку блокировки в моем приложении, даже если я запустил приложение Галерея / Камера из моего приложения;так что даже запущенная Галерея / Камера также будет очищена от задачи моего приложения. Пожалуйста, предложите способ для того же.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Запустите службу в фоновом режиме с уведомлением, и внутренний экран обнаружения службы заблокирован или нет. // createAndShowForegroundNotification создаст уведомление, которое // не может быть отменено. затем зарегистрируйте фильтр намерений и не забудьте отменить регистрацию при // уничтожении

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    createAndShowForegroundNotification(BackgroundSyncService.this, 9797);
    final IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    mScreenReceiver = new ScreenReceiver();
    this.registerReceiver(mScreenReceiver, filter);
    return START_STICKY;
}

// это приемник, который будет вызываться при выключенном освещении экрана внутри службы

открытый класс ScreenReceiverрасширяет BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here

        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here

        } else{

              }
    }

}
0 голосов
/ 18 октября 2019

onStop () вызывается каждый раз, когда вы нажимаете кнопку блокировки. Поэтому переопределите метод, чтобы проверить, активен ли экран или нет каждый раз, когда onStop () запускается, а затем вызовите свою первую операцию.

@Override
    protected void onStop() {
        super.onStop();

        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

        if(!pm.isScreenOn()){

            Intent mStartActivity = new Intent(YOUR_CURRENT_ACTIVITY.this, YOUR_FIRST_ACTIVITY.class);
            PendingIntent mPendingIntent = PendingIntent.getActivity(YOUR_CURRENT_ACTIVITY.this, 123456,    mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
            mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
            System.exit(0);

        }
    }
...