对 SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 的处理

原创 2017年03月28日 17:27:40

最近开始开始研究 Android 6.0 的适配,关于两个特殊权限,查阅了一下资料,对于处理方法,在这里做个记录。

SYSTEM_ALERT_WINDOW

@TargetApi(Build.VERSION_CODES.M)
    private void requestDrawOverLays() {
        if (!Settings.canDrawOverlays(SettingActivity.this)) {

            AlertDialog dialog = new AlertDialog.Builder(SettingActivity.this)
                    .setTitle("需要您手动授予权限")
                    .setMessage("点击 OK 进入设置页面手动开启权限,允许本应用在其他应用界面之上打开")
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        //核心代码
                            Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                                    Uri.parse("package:" + getPackageName()));
                            startActivityForResult(i, OVERLAY_PERMISSION_REQ_CODE);
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            mSwSms.setChecked(false);
                        }
                    })
                    .create();
            dialog.show();
        }
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
            if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(this)) {
                Toast.makeText(this, "Permission Denied by user.", Toast.LENGTH_SHORT)
                        .show();
                mSwSms.setChecked(false);
            } else {
                Toast.makeText(this, "Permission allowed", Toast.LENGTH_SHORT).show();
            }
        } else if (requestCode == QRCODE_RESULT) {
            if (resultCode == RESULT_OK) {
                Bundle bundle = data.getExtras();
                String scanResult = bundle.getString("result");
                mScanResult.setText(scanResult);
            }
        }
    }

WRITE_SETTINGS

@TargetApi(23)
    private void writeSettingsPermission() {
        if(!Settings.System.canWrite(this)){
            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle("WRITE_SETTINGS权限申请")
                    .setMessage("点击OK进入设置界面授予权限")
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //核心代码
                            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
                                    Uri.parse("package:" + getPackageName()));
                            startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    })
                    .create();
            dialog.show();
        }
    }

    @Override
    @TargetApi(23)
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
            if (Settings.System.canWrite(this)) {
                Toast.makeText(this, "WRITE_SETTINGS permission granted", Toast.LENGTH_SHORT)
                        .show();
            } else {
                Toast.makeText(this, "WRITE_SETINGS permission denied", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

JavaScript各种对话框(alert、confirm、prompt),window.open打开关闭窗口,document.write输出内容

JavaScript-输出内容(document.write) document.write() 可用于直接向 HTML 输出流写内容。简单的说就是直接在网页中输出内容。 第一...

Android 全局弹出对话框SYSTEM_ALERT_WINDOW权限

方案一、 1、在开发中有时会用到全局弹出对话框但必须在manifest中申请权限:2、创建Dialog AlertDialog.Builder builder=new AlertDia...

Android6.0 申请SYSTEM_ALERT_WINDOW权限 没有弹出权限框

问题:在Android6.0申请SYSTEM_ALERT_WINDOW权限,没有弹授权框? 解决:在android6.0应用开发时,动态申请权限时。按照官方文档无法申请到SYSTEM_ALERT_W...

android M SYSTEM_ALERT_WINDOW权限问题

public class ForceOfflineReceiver extends BroadcastReceiver { @Override public void onReceive...

Response.Write("<script>alert('验证码不正确');</script>"); 丢失样式表解决方案

1 .  Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", " alert('登录成功!'); ") 2. ...
  • windgod
  • windgod
  • 2011年08月31日 13:59
  • 964

重写window.alert方法

  • 2010年06月12日 10:38
  • 56KB
  • 下载

nor current process has android.permission.WRITE_APN_SETTINGS Proxy andriod,代理上网,wap网络请求问题

很多朋友,在使用android做网络请求时,会遇上一个问题,当用户使用的是wap网络时,则需要为网络请求头加上代理地理和端口号。 而使用wifi或者cmnet网络连接时,不用设置代理地址和端口号。很多...

解决android.permission.WRITE_APN_SETTINGS

在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明Android:name="android.permission.WRITE_APN_SETTINGS...

HTML、CSS和JavaScript学习四(Window对象之alert、confirm、prompt、open、onload...)

Window对象 1.alert(“文本内容”):警告框(window中的方法),出现时,用户需要点击确定才能继续进行操作。一般在javascript学习时经常用,相当于java中的System.ou...

selenium之 辨识alert、window以及操作

很多人分辨不出什么是alert、什么是window,今天讨论下怎么辨识alert和window,以及页面元素如div伪装的对话框。 1.分辨 首先区别下alert、window和伪装对话框...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对 SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 的处理
举报原因:
原因补充:

(最多只允许输入30个字)