在来电屏幕上弹出

时间:2012-01-02 09:33:46

标签: android android-layout dialog popup toast

我想在Android的来电屏幕上创建一个自定义弹出窗口,我希望为用户添加信息。 我希望弹出窗口不会禁用后台的任何可点击性,以便用户仍然可以接听电话。

我知道这是可能的,因为许多应用程序都这样做,例如MeZeZe appenter image description here

更多信息

  1. 半透明主题不起作用,因为它取消了以前活动的可点击性。
  2. 吐司不是一种选择 - 我不希望它消失。
  3. 我知道有许多相似的主题 - 我读过很多相似的主题但没有人回答我的具体问题。
  4. 一旦呼叫是接收者,我已经知道如何“让事情发生”,所以不需要INCOMING_CALL活动提示。
  5. 非常感谢任何帮助! 谢谢

3 个答案:

答案 0 :(得分:11)

如果您希望保持“受理”活动仍然可以点击,但您的叠加层没有任何控件,则可以通过调用

来执行此操作
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"

答案 1 :(得分:0)

这对我来说有一些补充:

在BroadcastReceiver中,我在意图中添加了以下行:

        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

此外,在我启动PopupWindow活动之前,我添加了大约1.5秒的延迟,以确保它在来电系统屏幕之后。

在Manifest文件中我添加了:

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

然而,这个解决方案仍有一个缺点:

弹出屏幕出现在来电系统屏幕上方,因此用户必须执行操作(例如单击按钮,按键或触摸屏幕)以关闭弹出屏幕,因为来电屏幕仍在下方并且在弹出屏幕关闭之前无法访问。

答案 2 :(得分: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);