#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,
List opponentsIds, 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(); - не нужен )
Комментариев нет:
Отправить комментарий