在锁屏中显示活动(主题对话框)显示在拨号器上方?

时间:2016-05-05 07:19:42

标签: android android-activity

需要在拨号器上显示活动(主题对话框),并在活动中填充一些信息,如真正的调用者。在未锁定的手机中,它运行良好。

但在锁定的手机中,它没有按预期工作。做了一些谷歌搜索,发现需要添加一些标志才能使对话框显示在锁定屏幕中。

CallActivity.java

LayoutParams layoutParams = new LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_DIALOG | LayoutParams.TYPE_SYSTEM_ALERT |
    LayoutParams.TYPE_SYSTEM_OVERLAY,
    LayoutParams.FLAG_NOT_TOUCH_MODAL |
            LayoutParams.FLAG_NOT_FOCUSABLE |
            LayoutParams.FLAG_TURN_SCREEN_ON |
            LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            LayoutParams.FLAG_KEEP_SCREEN_ON |
            LayoutParams.FLAG_DISMISS_KEYGUARD,
    PixelFormat.TRANSLUCENT);
getWindow().setAttributes(layoutParams);

在上面的代码中,我添加了与make活动相关的更改显示为对话框,并且几个与make对话框相关的标志(FLAG_TURN_SCREEN_ON,FLAG_SHOW_WHEN_LOCKED,FLAG_KEEP_SCREEN_ON,FLAG_DISMISS_KEYGUARD)在锁定屏幕中运行良好(但它没有)。

我也用(来自广播接收器)

开始活动
            Intent intent = new Intent(context, MyActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
            context.startActivity(intent);

1 个答案:

答案 0 :(得分:-1)

使用系统警报权限在窗口管理器上添加视图

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

mParams = new WindowManager.LayoutParams();
mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 
mParams.format = PixelFormat.TRANSLUCENT;
mParams.flags = 262184;

mWindowManager.addView(view, mParams);

注意:如果应用面向API级别23或更高级别,则应用用户必须通过权限管理屏幕向应用明确授予此权限。该应用程序通过发送动作ACTION_MANAGE_OVERLAY_PERMISSION来请求用户的批准。该应用可以通过调用Settings.canDrawOverlays()来检查它是否具有此授权。