2012-01-02 102 views
17

我想创建一个定制的弹出式通过android的来电屏幕,我希望为用户添加信息。 我希望弹出窗口不会禁用背景中的任何可点击性,以便用户仍可以应答呼叫。来电屏幕弹出

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

一些更多的信息

  1. 半透明的主题没有工作,因为它取消了前一种行为的可点击。
  2. 吐司不是一种选择 - 我不希望它消失。
  3. 我知道有很多类似的线程 - 我读了很多,没有回答我的具体问题。
  4. 我已经知道如何在呼叫接收时“发生某些事情”,因此不需要INCOMING_CALL活动提示。

希望有任何帮助! 感谢

+0

您能否请分享您的工作方式。比你 – png 2012-06-06 11:06:06

+0

你能分享你的解决方案吗?也许在github上?谢谢! – asheinfeld 2013-01-12 00:11:43

+0

我会分享我的解决方案,当我开始工作时,不能离开家。对不起:D – Guy 2013-01-12 16:35:19

回答

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

谢谢!有一点补充。将其添加到您的回复中,以便答案完整。并在评论中的代码是不好:) – Guy 2012-01-05 08:35:30

+0

有什么办法可以控制整个屏幕,所以我有一个自定义的传入屏幕? – user1163234 2012-03-05 12:31:57

+0

嗨,我有一个问题。如果我在我的应用程序中接到电话(即我的应用程序中某个活动的任何视图都处于焦点状态),则无法正常工作。 Android的来电屏幕来了,消失了,我的应用程序活动窗口显示,无论屏幕覆盖我在做什么,这也是可见的。请帮忙 – png 2012-06-06 11:04:56

0

这与一些补充工作对我来说:

在广播接收器添加以下行的意图:

 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文件添加以下propperties:

android:windowAnimationStyle="@android:style/Animation.Translucent" 
    android:windowBackground="@android:color/transparent" 
    android:windowIsTranslucent="true" 

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

出现来电呼叫系统屏幕上方的弹出画面,因此用户具有执行操作(例如点击按钮,按下按键或触摸屏幕)以关闭弹出屏幕,因为来电屏幕保持在下方,并且在弹出屏幕关闭之前无法访问。

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);