#java #android
Есть фоновый сервис, который бродкастом "слушает" сервер. Когда с сервера приходит звонок, срабатывает метод: CallActivity1.start(this, qbrtcSession.getConferenceType(), qbrtcSession.getOpponents(), qbrtcSession.getUserInfo(), Consts.CALL_DIRECTION_TYPE.INCOMING); Где CallActivity1 — одна из активностей приложения, но не главная. Принимает она: public static void start(Context context, QBRTCTypes.QBConferenceType qbConferenceType, ListopponentsIds, Map userInfo, Consts.CALL_DIRECTION_TYPE callDirectionType){ Intent intent = new Intent(context, CallActivity1.class); intent.putExtra(Consts.CALL_DIRECTION_TYPE_EXTRAS, callDirectionType); intent.putExtra(Consts.CALL_TYPE_EXTRAS, qbConferenceType); intent.putExtra(Consts.USER_INFO_EXTRAS, (Serializable) userInfo); intent.putExtra(Consts.OPPONENTS_LIST_EXTRAS, (Serializable) opponentsIds); if (callDirectionType == Consts.CALL_DIRECTION_TYPE.INCOMING) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } context.startActivity(intent); } И в onCreate прописано : KeyguardManager.KeyguardLock lock = ((KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE)).newKeyguardLock(KEYGUARD_SERVICE); PowerManager powerManager = ((PowerManager) getSystemService(Context.POWER_SERVICE)); PowerManager.WakeLock wake = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); lock.disableKeyguard(); wake.acquire(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); По моей логике при звонке окно активности должно открываться всегда, оно почти так и работает, но попеременно. При разблокированном экране активность ВСЕГДА запускается, при screen_off иногда, а если на screen_off еще и стоит keyguard, то вообще никогда не срабатывает, или может появиться и через мнгновенье закрыться. Пошаговое выполнение показало что как только активность появилась, сразу же сработал onStop, и почему так — неизвестно.
Ответы
Ответ 1
Вам нужно использовать системный тип активити чтобы оно отображалось поверх всего. Для этого нужно добавить в манифест следующие разрешение:и установить для Activity тип TYPE_SYSTEM_OVERLAY. MyActivity.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY); Тогда Activity будет поверх вообще всего, включая экран блокировки. Также вам не нужно будет разблокировать телефон программно ( lock.disableKeyguard(); - не нужен )
Комментариев нет:
Отправить комментарий