Android API 26上的覆盖权限错误

Android API 26上的覆盖权限错误,android,permissions,android-8.0-oreo,Android,Permissions,Android 8.0 Oreo,当我的应用程序试图绘制一个系统覆盖图时,它崩溃并告诉我对窗口类型2010的权限被拒绝。但是,我要求用户在首次安装时在教程活动中授予操作\u管理\u覆盖\u权限。此外,这仅在API 26上发生。我已经测试了所有其他受支持的SDK,我能够绘制一个没有崩溃或错误的覆盖图 我用过 Settings.canDrawOverlay(context); 它返回真的。因此,系统似乎知道权限已授予,但问题仍然存在 以下是覆盖代码: LayoutInflater inflater = (LayoutInf

当我的应用程序试图绘制一个系统覆盖图时,它崩溃并告诉我对窗口类型2010的权限被拒绝。但是,我要求用户在首次安装时在教程活动中授予
操作\u管理\u覆盖\u权限
。此外,这仅在API 26上发生。我已经测试了所有其他受支持的SDK,我能够绘制一个没有崩溃或错误的覆盖图

我用过

Settings.canDrawOverlay(context);
它返回真的。因此,系统似乎知道权限已授予,但问题仍然存在

以下是覆盖代码:

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.view_driving, mRelativeLayout);

    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            PixelFormat.TRANSLUCENT);

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
        layoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    } else{
        layoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    }

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
        layoutParams.flags = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    }

    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

    layoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

    mRelativeLayout.setSystemUiVisibility(uiOptions);

    if(Settings.canDrawOverlays(mContext)){
        WindowManager windowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
        windowManager.addView(mRelativeLayout, layoutParams);  
    }
调用addView时会发生崩溃


找到了解决方案。这是由于尝试调用WindowManager.LayoutParams.TYPE_SYSTEM_错误导致的,API 26不再支持该错误哪种类型适用于Android O?键入应用程序覆盖?键入应用程序覆盖可以工作,但当屏幕锁定时,视图将不可见。我仍在试图弄清楚这是否仍然可行…@vector你找到解决方案了吗?@anagaf不幸的是,我还没有找到一种方法在屏幕锁定的情况下使覆盖层可见。也许有一个有根的系统是可能的,但我没有朝那个方向调查