Всплывающее окно над экраном входящего вызова
Я хочу создать настраиваемое всплывающее окно над экраном входящего вызова android, где я хочу добавить информацию для пользователя. Я хочу, чтобы всплывающее окно не отключало кликабельность из фона, чтобы пользователь мог ответить на вызов.
Я знаю, что это возможно, так как многие приложения сделать это, например,MeZeZe app:
дополнительная информация:
- полупрозрачная тема не работает, так как он отменяет кликабельность прежней активности.
- тост не вариант - я не хочу, чтобы он исчез.
- я знаю, что есть много подобных потоков - я читаю многие из них, и никто не отвечает на мою конкретную проблему.
- я уже знаю, как "сделать что-то случиться" после вызова приемника, поэтому нет необходимости в подсказках 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);