Экстренное уведомление, которое не предлагает разблокировать на заблокированном экране, чтобы открыть действие

Существует приложение для экстренных случаев под названием Medical Id. У него есть замечательная функция, в которой он показывает уведомление на заблокированном экране. Пользователь может просто дважды нажать на уведомление, чтобы открыть действие. Для уведомлений других приложений, если пользователь коснется, сначала будет предложено разблокировать. Я ищу ту же функцию, но не могу добиться того же. Я попытался добавить флаги к прикрепленным окнам.

@Override
    public void onAttachedToWindow()
    {
        super.onAttachedToWindow();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON &
                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD &
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED &
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON &
                WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
    }

Добавлено showonlockscreen к действию в манифесте, но оно запрашивает разблокировку экрана перед открытием действия. Взгляните на медицинскую карту для ясности. Я не знаю, что они используют для обхода разблокировки. Настройки телефона для уведомлений общедоступны в моем телефоне. Удивительно то, что даже если настройки уведомлений вашего телефона являются частными, уведомление о медицинском удостоверении будет присутствовать там, даже если никаких других уведомлений нет. Любые зацепки полезны.


person Raghav Sharma    schedule 07.06.2017    source источник
comment
Для устройств Marshmallow вам необходимо запросить разрешение для ScreenOverlay, если вы хотите показывать свое уведомление над экраном блокировки Intentintent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse(package: + getPackageName())); startActivityForResult (намерение, OVERLAY_PERMISSION_REQ_CODE);   -  person Andy Developer    schedule 07.06.2017
comment
@AndyDeveloper, можем ли мы получить оверлейное уведомление? Оверлейная активность успешно обходит экран блокировки, используя приведенный выше ответ в зефире. В моем случае нажатие на уведомление по-прежнему предлагает разблокировать. Думаю, если уведомление еще и наложить, то работать будет. Пожалуйста, поделитесь своими мыслями.   -  person Raghav Sharma    schedule 07.06.2017
comment
Нет, он по-прежнему просит вас разблокировать экран. Вы можете попробовать DevicePolicyManager для программной блокировки и разблокировки устройства. Вот сайт разработчиков ссылка, а вот stackoverflow < href="https://stackoverflow.com/a/14352807/5860777">ссылка. Надеюсь, что это поможет вам.   -  person Andy Developer    schedule 07.06.2017


Ответы (2)


Вы должны использовать трубы | вместо амперсанда &

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

Также это работает только выше Android 4.4.

person moritzg    schedule 07.06.2017
comment
Да, я сначала попробовал трубы, но это даже не помогает. Я тестирую на устройстве зефир. - person Raghav Sharma; 07.06.2017

если вы хотите показать активность при нажатии вашего уведомления на экране блокировки, вы можете сделать это в OnCreate вашего жизненного цикла активности

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setTurnScreenOn(true);
        setShowWhenLocked(true);
    } else {
        window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    }
}
person Hasif Seyd    schedule 16.11.2018