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

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

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

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

  1. полупрозрачная тема не работает, так как он отменяет кликабельность прежней активности.
  2. тост не вариант - я не хочу, чтобы он исчез.
  3. я знаю, что есть много подобных потоков - я читаю многие из них, и никто не отвечает на мою конкретную проблему.
  4. я уже знаю, как "сделать что-то случиться" после вызова приемника, поэтому нет необходимости в подсказках incoming_call.

был бы признателен за любую помощь! Спасибо

3 ответов


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

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"

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

В 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>

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

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

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

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

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


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

@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);