Android 将视图置于绝对前沿(甚至是过度警报对话框)

Android 将视图置于绝对前沿(甚至是过度警报对话框),android,android-alertdialog,Android,Android Alertdialog,我需要一个视图始终处于最前沿,即使是过于警惕的对话框。我想可能有两种方法来实现这一点: 以某种方式将警报对话框创建为现有视图的一部分,而不是其自身的活动 视图上的某种标志将其显示在所有内容的前面,包括警报对话框 这可能吗?如果是,如何操作?带有LayoutParams和标记为的WindowManager键入\u SYSTEM\u ERROR。在锁屏上也可以看到 WindowManager windowManager = (WindowManager)getSystemService(WINDOW

我需要一个视图始终处于最前沿,即使是过于警惕的对话框。我想可能有两种方法来实现这一点:

  • 以某种方式将警报对话框创建为现有视图的一部分,而不是其自身的活动
  • 视图上的某种标志将其显示在所有内容的前面,包括警报对话框

  • 这可能吗?如果是,如何操作?

    带有LayoutParams和标记为
    的WindowManager键入\u SYSTEM\u ERROR
    。在锁屏上也可以看到

    WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
    
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
    PixelFormat.TRANSLUCENT);
    
    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 100; // position on screen (optional)
    params.y = 100;
    
    添加视图:

    windowManager.addView(yourView, params);
    
    编辑:

    为避免覆盖锁屏:移除
    类型系统错误
    标志并添加以下内容:

    WindowManager.LayoutParams.TYPE_PHONE
    
    要使其正常工作,您还需要向AndroidManifest.xml添加以下权限:

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

    WindowManager的布局参数和标记为
    类型\系统\错误
    。也可以在锁屏上显示。是否有一个版本的内容不足以覆盖锁屏?编辑答案以包括
    TYPE\u PHONE
    标志,测试它。谢谢!现在做标记作为答案。我很快就会测试。电话选项需要其他许可吗?获取与权限相关的异常。不,应该是这样。异常是什么?
    if (Settings.canDrawOverlays()) {
        // you have permission
    } else {
        // send an intent with action "ACTION_MANAGE_OVERLAY_PERMISSION"
    }