Popup over incoming-call screen

2019-01-08 20:54发布

I want to create a customized popup over the android's incoming call screen where I wish to add information for the user. I want the popup to not disable any clickability from the background so that the user could still answer the call.

I know it is possible since many applications do it, e.g. MeZeZe app: enter image description here

Some more information:

  1. A translucent theme did not work since it cancels the former activity's clickability.
  2. A toast is not an option - I don't want it to disappear.
  3. I know there are many similar threads - I read many of them and none answer my specific problem.
  4. I already know how to "make something happen" once a call is receiver, so no need for INCOMING_CALL activity tips.

Would appreciate any help! Thanks

3条回答
SAY GOODBYE
2楼-- · 2019-01-08 21:19

It will not only show the activity on lock screen but will also allow to receive an incoming call behind your activity screen.

@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);
查看更多
Melony?
3楼-- · 2019-01-08 21:30

This worked for me with a few additions:

In the BroadcastReceiver I added the following lines to the intent:

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

Furthermore, I added a delay of roughly 1.5 seconds before I fire PopupWindow activity to make sure it is coming after the incoming call system screen.

In the Manifest file I added:

<activity android:name=".PopUpIncomingCallActivity" 
          android:theme="@android:style/Theme.Translucent">

</activity>

to make sure that the layout of the Popup screen is translucent.

In the Popupscreen layout xml file I added the following propperties:

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

However this solution still has a drawback:

The Popup screen appears above the incoming call system screen and therefore a user has to perform an action (such as clicking a button, pressing a key or touching the screen) to close the Popup screen, as the incoming call screen remains underneath and is not accessible until the popup screen is closed.

查看更多
放荡不羁爱自由
4楼-- · 2019-01-08 21:35

If you want to keep the Call activity still clickable, but not have any controls on your overlay, you can do this by calling

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

In the onCreate() method of the activity that is shown over the call.

The layout parameters useable together with this are:

android:windowBackground="@android:color/transparent" 
android:windowIsTranslucent="true" 
android:windowAnimationStyle="@android:style/Animation.Translucent"
查看更多
登录 后发表回答