Активность остается ЧЕРНОЙ при запуске в режиме ожидания - PullRequest
0 голосов
/ 30 октября 2018

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

Теперь, хотя экран черный, представления реагируют (если я коснусь их, они будут работать)

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

Видео странностей:

Отзывчивый черный экран

Выключить и снова включить

Попытка сделать скриншот

Вот как я запускаю упражнение:

val builder = NotificationCompat.Builder(context, NotificationChannels.CHANNEL_ALARM_SERVICE)
...
// set intent
val alarmIntent = Intent(context, AlarmActivity::class.java)
alarmIntent.putExtra(IntentExtras.KEY_ID, alarm.id)
builder.setFullScreenIntent(PendingIntent.getActivity(context, RequestCodes.REQUEST_CODE_ALARM_ACTIVITY, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT), true)
...
startForeground(...)

Вот как я разблокирую экран в методе onCreate Действия

public class ScreenUnlockerUtil {

public static void unlockScreen(BaseActivity activity) {

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        // in addition to flags
        activity.setShowWhenLocked(true);
        activity.setTurnScreenOn(true);
        return;
    }


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        KeyguardManager keyguardManager = (KeyguardManager) activity.getSystemService(KEYGUARD_SERVICE);
        if (keyguardManager != null) {
            keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
                @Override
                public void onDismissError() {
                    super.onDismissError();
                    Timber.e("Keyguard Dismiss Error");
                }

                @Override
                public void onDismissSucceeded() {
                    super.onDismissSucceeded();
                    Timber.d("Keyguard Dismiss Success");
                }

                @Override
                public void onDismissCancelled() {
                    super.onDismissCancelled();
                    Timber.w("Keyguard Dismiss Cancelled");
                }
            });
        }
        return;
    }


}

Мне удалось воспроизвести проблему с

adb shell dumpsys deviceidle force-idle

Естественно, я не могу опубликовать ВСЕ код, но дайте мне знать, если вам что-нибудь понадобится.

Спасибо!

1 Ответ

0 голосов
/ 30 октября 2018

Удалите return из вашего оператора if:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
    // in addition to flags
    activity.setShowWhenLocked(true);
    activity.setTurnScreenOn(true);
    //return;
}
...