弹出式窗口覆盖来电界面

17

我想在Android的来电界面上创建一个自定义弹窗,向用户添加信息。

我希望这个弹窗不会禁用背景的任何可点击性,以便用户仍然能够接听电话。如许多应用程序所做的那样,例如MeZeZe应用

enter image description here

更多信息:

  1. 半透明主题不起作用,因为它会取消前一个活动的可点击性。
  2. Toast不是一个选项——我不想让它消失。
  3. 我知道有许多类似的线程——我阅读了很多,但没有一个回答了我的具体问题。
  4. 我已经知道如何在接收到电话后“使某事发生”,因此不需要INCOMING_CALL活动提示。

感谢任何帮助!


请问您能分享一下您是如何让它工作的吗?谢谢。 - png
你能分享一下你的解决方案吗?也许在Github上?谢谢! - albertosh
我会在上班时分享我的解决方案,无法在家中完成。抱歉:D - Guy
@Guy。你能发一下代码吗? - Slay
考虑这个替代方案:从我的应用程序提供来电者ID - Jacob Michaelis
3个回答

11

如果您希望保持Call活动仍可点击,但是在覆盖层上没有任何控件,您可以调用以下代码实现:

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"

谢谢!稍作修改就可以了。我把它添加到你的回复中,这样答案就完整了。在注释中编写代码是不好的 :) - Guy
有没有办法让我完全控制屏幕,以便我可以拥有自定义的来电界面? - user1163234
嗨,我有一个问题。如果在我的应用程序中接听电话(例如,我的应用程序的任何活动视图处于焦点),这个功能无法正常工作。安卓系统的来电界面会出现并消失,同时显示我的应用程序活动窗口和我所做的任何屏幕覆盖。请帮忙解决一下。 - png
有没有办法在锁屏界面上显示这个? - Rakesh Yadav

0
它不仅会在锁屏界面上显示活动,还可以允许在您的活动屏幕后接收来电。
@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);

0
这对我有用,加了一些东西:
在BroadcastReceiver中,我添加了以下行到intent:
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

此外,我在启动PopupWindow活动之前添加了大约1.5秒的延迟,以确保它在来电系统屏幕之后出现。
在清单文件中,我添加了:
<activity android:name=".PopUpIncomingCallActivity" 
          android:theme="@android:style/Theme.Translucent">

</activity>

为了确保弹出屏幕的布局是半透明的。
在Popupscreen布局xml文件中,我添加了以下属性:
    android:windowAnimationStyle="@android:style/Animation.Translucent"
    android:windowBackground="@android:color/transparent"
    android:windowIsTranslucent="true"

然而,这个解决方案仍存在一个缺点:
弹出屏幕出现在来电系统屏幕的上方,因此用户必须执行某种操作(如点击按钮、按键或触摸屏幕)才能关闭弹出屏幕,因为来电屏幕仍然在下面,并且在弹出屏幕关闭之前无法访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接