Всплывающее окно по входящему вызову
Я хочу создать настраиваемое всплывающее окно на экране входящих вызовов Android, где я хочу добавить информацию для пользователя.
Я хочу, чтобы всплывающее окно не отключило какую-либо кликабельность из-за фона, чтобы пользователь мог отвечать на вызов.
Я знаю, что это возможно, поскольку это делают многие приложения, например. Приложение MeZeZe:
![enter image description here]()
Дополнительная информация:
- Полупрозрачная тема не работала, так как она отменяет прежнюю интерактивность действий.
- Тост не является вариантом - я не хочу, чтобы он исчезал.
- Я знаю, что существует много подобных потоков - я прочитал многие из них, и никто не ответил на мою конкретную проблему.
- Я уже знаю, как "сделать что-то случится", как только звонок будет приемником, поэтому нет необходимости в подсказках активности INCOMING_CALL.
Поблагодарили бы за помощь!
Спасибо
Ответы
Ответ 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);