Android无法解决permission denied for this window type

安卓学者请教各位大哥们:我的代码出现了哪里的问题 当我需要系统弹出一个系统对话框的时候老是报错
代码如下:这是我在Mainfest中注册的内容

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.wangsj.broadcastbestpractice"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19"/>
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

        </activity>
        <activity android:name=".MainActivity">
        </activity>
        <receiver android:name=".ForceOfflineReceiver">
            <intent-filter>
                <action android:name="com.example.broadcastbestpractice.FORCE_OFFLINE"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

这是我在函数中调用系统对话框的的代码

 public class ForceOfflineReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        AlertDialog.Builder dialogBulider = new AlertDialog.Builder(context);
        dialogBulider.setTitle("Warning");
        dialogBulider.setMessage("You are forced to be offline . Please try login again");
        dialogBulider.setCancelable(false);
        dialogBulider.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ActivityCollector.finishAll();
                Intent intent = new Intent(context, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
            }
        });
        AlertDialog alertDialog = dialogBulider.create();
        alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        alertDialog.show();
    }
}

我的模拟器用的是android6.0 api用的是23 我已经仔细核对了代码与《第一行代码》中的代码完全相同,为什么我的不能运行成功求解释。新人c币不多,请个各位大侠行行好

android6.0需要申请权限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SYSTEM_OVERLAY_WINDOW) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.SYSTEM_OVERLAY_WINDOW) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.SYSTEM_OVERLAY_WINDOW};
ActivityCompat.requestPermissions(this, permissions, 10);
return;
}
}

            重写
            @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    loge(TAG, "requestCode" + requestCode + "permissions"+ Arrays.toString(permissions)+"grantResults"+Arrays.toString(grantResults));
}
    可以看到申请是否成功

要显示出来也很简单,把下面这句话屏蔽了应该就可以了。这句话用的权限级别比较高,一般系统电量提示的那种对话框都用的这种权限。
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

在没有了解6.0的情况下,建议不要使用那么高的版本,关于权限:http://www.w2bc.com/article/android-6-0-runtime-permission

19以上 推荐是用 toast模式 不要使用TYPE_SYSTEM_ALERT

我也是这个问题,你解决了吗?

刚刚遇到这个问题...我一开始的编译版本如下:
图片说明

当targetSdkVersion=23时,4.4版本的模拟器正常运行,但是界面显示有点不正常,5.0根本无法启动,6.0和N可以启动但是不可以创建对话框,截图如下:
图片说明

一个解决办法是将targetSdkVersion改成**22**,这样的话改成22的话,4.4模拟器依然正常运行,但界面显示还是有点异常,5.0依然无法启动,6.0和N可以正常运行,界面显示也正常截图如下:
图片说明

顺便说一句,动态申请权限无效...

解决方法见:
http://www.enjoydiy.com/3554.html

同样遇到了,请问怎么解决的

alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
改成
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);

c786909486 说的是可以实现的