Я пытаюсь показать всплывающее окно всякий раз, когда пользователь получает вызов, очень похоже на приложение truecaller. Всплывающее окно будет показывать различную информацию о другой стороне.Dispatch touch вне диалога/предупреждения
Я реализовал все в нем, кроме всплывающего интерфейса. Я сначала попытался вызвать простую деятельность, которая отображается только в верхней половине экрана, оставив нижнюю половину прозрачной. Затем я попытался активировать диалог, который показывает всплывающее окно в центре экрана, пока я хочу его сверху. Наконец-то я пробовал с системными оповещениями.
Во всех трех сценариях Мое всплывающее окно находилось на определенной части экрана, а остальная часть экрана была прозрачной. Однако прикосновение даже не проходит от прозрачной области к активности/пользовательскому интерфейсу за ней. Я хочу, чтобы всплывающее окно появлялось до тех пор, пока пользователь не выполнит вызов, который я использовал с помощью таймера, чтобы вызвать всплывающее действие через две секунды после вызова. Проблема заключается в том, что я хочу, чтобы пользователь взаимодействовал с остальной частью экрана, даже если всплывающее окно отображается, но я не могу это сделать во всех трех решениях. Пользователь не может повесить трубку и не может ничего сделать, пока не появится всплывающее окно.
Итак, мой вопрос: есть ли способ показать всплывающее окно в верхней части экрана, в то время как остальная половина по-прежнему передает события касания к остальной части пользовательского интерфейса системы, точно так же, как делает всплывающее окно truecaller (или как тост сообщения)?
Вот две системы оповещения код, который я попробовал -
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT,
LayoutParams.FLAG_SHOW_WHEN_LOCKED,
PixelFormat.OPAQUE);
params.gravity = Gravity.TOP;
windowManager.addView(preRootView, params);
и
LayoutParams params = new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT |
LayoutParams.TYPE_SYSTEM_OVERLAY,
LayoutParams.FLAG_NOT_TOUCH_MODAL |
LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSPARENT);
params.gravity = Gravity.TOP;
windowManager.addView(preRootView, params);