即使在清单中添加了权限,权限错误仍然会显示 [英] Permission error is still showing even when added permission in manifest

查看:123
本文介绍了即使在清单中添加了权限,权限错误仍然会显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的类中实现了AlertDialog,它扩展了Application类,并且还在清单文件中添加了适当的权限:

I implemented AlertDialog in my class which extend Application class, also added proper permission in manifest file:

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

查看我的代码:

private void showAlertDialog(Context context) {
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // do some stuff eg: context.onCreate(super)
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(context)
        .setCancelable(false)
        .setMessage("Messag...")
        .setTitle("Title")
        .setPositiveButton("OK", listener);

        Dialog dialog = builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
}

调用方法:

showAlertDialog(getApplicationContext());

我尝试了这个答案,它昨天有效,现在不起作用:

I tried this answer, it was working yesterday, now is not working: How to show Dialog Box from the class which extends Application in android?

顺便说一句,它昨天工作了,我不知道为什么今天不工作,我想念什么?

BTW, it was working yesterday, I don't know why it is not working today, what am I missing?

推荐答案

如果您正在检查棉花糖或API级别以上的设备,是否定义了运行时权限?

Did you define runtime permissions if you are checking in marshmallow or above API level devices?

检查覆盖权限

public static int OVERLAY_PERMISSION_REQ_CODE = 1234;

public void someMethod() {
if (!Settings.canDrawOverlays(this)) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}}

在onActivityResult中,

In onActivityResult,

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
        if (!Settings.canDrawOverlays(this)) {
            // SYSTEM_ALERT_WINDOW permission not granted...
        }
    }
}

最后----

检查设备是否具有API 23 +

Check if the device has API 23+

如果使用23+ API,则检查用户是否具有权限

if 23+ API then check if the user has permission or not

如果曾经获得许可,请勿将他驱逐至Settings.ACTION_MANAGE_OVERLAY_PERMISSION,如果尚未许可,则要求进行运行时许可检查

if had permit once don't drive him to Settings.ACTION_MANAGE_OVERLAY_PERMISSION and if has not to permit yet then ask for runtime permission check

onCreate()方法中的行置于下方.将此放在setContentView()

Put below the line in your onCreate() method. Put this after setContentView()

checkPermission();

现在将下面的代码放在onActivityResult中,

Now put below code in onActivityResult,

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
        if (!Settings.canDrawOverlays(this)) {
            // You don't have permission
            checkPermission();
        } else {
            // Do as per your logic 
        }
    }
}

现在终于有了checkPermission方法代码,

Now finally the checkPermission method code,

public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
    }
}}

并声明一个全局变量

public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;

快乐编码:)

这篇关于即使在清单中添加了权限,权限错误仍然会显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆