Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Разблокировка экрана Android

#java #android #activity


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

Проблема в том, что телефон разблокируется только в том случае, если он был заблокирован
в активности, в  которой прописан этот метод: Я прописал этот метод во всех активностях
моего приложения. И выходит, что если я заблокирую телефон вне приложения, то он в
нужный момент просто включит экран, но не разблокируется. Что надо делать?

@Override
   public void onAttachedToWindow() {
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
               WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}


Вот код Broadcast Receiver:там ничего особенного(просто вызываю активити)

@Override
public void onReceive(Context context, Intent intent) {
    WakeLock.acquire(context);
    Log.d(LOG_TAG, "receiver id started");
    Bundle bundle = intent.getExtras();
    alarm_time = (String) bundle.getSerializable("alarm_time"); //получаю time из интента
    alarm_name = (String) bundle.getSerializable("alarm_name"); //получаю name из интента

    Intent dialog_intent=new Intent(context, ServiceDialog.class);
    dialog_intent.putExtra("alarm_name",alarm_name);
    dialog_intent.putExtra("alarm_time",alarm_time);
    dialog_intent.putExtra("alarm_timeStart",alarm_time);

    dialog_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(dialog_intent);
}


А вот код класса WakeLock

public class WakeLock {
private static PowerManager.WakeLock wakeLock;

public static void acquire(Context context) {
    if (wakeLock != null) wakeLock.release();
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP |
            PowerManager.ON_AFTER_RELEASE,"Alarm");
    wakeLock.acquire();
}

public static void release() {
    if (wakeLock != null) wakeLock.release();
    wakeLock = null;
}

}


Причем флаг FULL_WAKE_LOCK id deprecated
    


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий