2 learningcoding learningcoding 于 2016.03.04 00:22 提问

Android无法解决permission denied for this window type 6C

安卓学者请教各位大哥们:我的代码出现了哪里的问题 当我需要系统弹出一个系统对话框的时候老是报错
代码如下:这是我在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币不多,请个各位大侠行行好

11个回答

c786909486
c786909486   2016.09.26 10:24

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

qq_31568297
qq_31568297 我查了半天 还是这个最快
大约一年之前 回复
qq_35506799
qq_35506799   2016.07.04 14:19
u013030748
u013030748 正解
一年多之前 回复
u014316811
u014316811   2016.03.04 16:14

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

dcxy0
dcxy0   Ds   Rxr 2016.03.04 10:38

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

u010046908
u010046908   2016.03.04 01:16

android6.0需要申请权限

learningcoding
learningcoding 回复请叫我小东子: 如何申请权限呢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/38.gif)
接近 2 年之前 回复
learningcoding
learningcoding 回复请叫我小东子: 如何申请权限呢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/38.gif)
接近 2 年之前 回复
u010046908
u010046908   2016.03.04 08:27

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));
}
    可以看到申请是否成功
learningcoding
learningcoding 请问这些代码是添加到哪里的,请详细解释一下可以么我是一个初学者 多谢多谢
接近 2 年之前 回复
luochoudan
luochoudan   Ds   Rxr 2016.03.04 09:23

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

learningcoding
learningcoding 额 并没有起作用
接近 2 年之前 回复
qq_34020662
qq_34020662   2016.03.29 22:39

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

lumia7
lumia7 你解决了吗?
一年多之前 回复
kangjianwei101
kangjianwei101   2016.06.08 23:09

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

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

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

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

lumia7
lumia7   2016.07.18 20:25

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

qq_31568297
qq_31568297 alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
大约一年之前 回复
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!