Подтвердить что ты не робот

Всплывающее окно по входящему вызову

Я хочу создать настраиваемое всплывающее окно на экране входящих вызовов Android, где я хочу добавить информацию для пользователя. Я хочу, чтобы всплывающее окно не отключило какую-либо кликабельность из-за фона, чтобы пользователь мог отвечать на вызов.

Я знаю, что это возможно, поскольку это делают многие приложения, например. Приложение MeZeZe: enter image description here

Дополнительная информация:

  • Полупрозрачная тема не работала, так как она отменяет прежнюю интерактивность действий.
  • Тост не является вариантом - я не хочу, чтобы он исчезал.
  • Я знаю, что существует много подобных потоков - я прочитал многие из них, и никто не ответил на мою конкретную проблему.
  • Я уже знаю, как "сделать что-то случится", как только звонок будет приемником, поэтому нет необходимости в подсказках активности INCOMING_CALL.

Поблагодарили бы за помощь! Спасибо

4b9b3361

Ответ 1

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

В методе onCreate() активности, которая отображается над вызовом.

Параметры макета, используемые вместе с этим:

android:windowBackground="@android:color/transparent" 
android:windowIsTranslucent="true" 
android:windowAnimationStyle="@android:style/Animation.Translucent"

Ответ 2

Это сработало для меня с несколькими дополнениями:

В BroadcastReceiver я добавил следующие строки в намерение:

        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

Кроме того, я добавил задержку примерно 1,5 секунды, прежде чем я запустил активность PopupWindow, чтобы убедиться, что она идет после экрана системы входящих вызовов.

В файле манифеста я добавил:

<activity android:name=".PopUpIncomingCallActivity" 
          android:theme="@android:style/Theme.Translucent">

</activity>

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

В xml файле макета Popupscreen я добавил следующие свойства:

    android:windowAnimationStyle="@android:style/Animation.Translucent"
    android:windowBackground="@android:color/transparent"
    android:windowIsTranslucent="true"

Однако это решение все еще имеет недостаток:

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

Ответ 3

Он будет показывать не только активность на экране блокировки, но также позволит принимать входящий вызов за экраном активности.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    win.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

    setContentView(R.layout.activity_main);