安卓6.0动态获取权限

来源:互联网 发布:资生堂化妆水知乎 编辑:程序博客网 时间:2024/06/05 01:57

在配置清单文件中写了权限之后发现安卓系统6.0及以上运行的时候权限都是关着的,这个时候需要动态获取



代码如下:

package com.zzb.permission;import android.Manifest;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.provider.Settings;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    // 要申请的权限    private String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            // 检查该权限是否已经获取            int i = ContextCompat.checkSelfPermission(this, permissions[0]);            // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝            if (i != PackageManager.PERMISSION_GRANTED) {                // 如果没有授予该权限,就去提示用户请求                startRequestPermission();            }        }    }    // 开始提交请求权限    private void startRequestPermission() {        ActivityCompat.requestPermissions(this, permissions, 321);    }    // 用户权限 申请 的回调方法    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == 321) {            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {                    // 判断用户是否 点击了不再提醒。(检测该权限是否还可以申请)                    boolean b = shouldShowRequestPermissionRationale(permissions[0]);                    if (!b) {                        // 用户还是想用我的 APP                         // 提示用户去应用设置界面手动开启权限                        goToAppSetting();                    } else                        finish();                } else {                    Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();                }            }        }    }    // 跳转到当前应用的设置界面    private void goToAppSetting() {        Intent intent = new Intent();        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        Uri uri = Uri.fromParts("package", getPackageName(), null);        intent.setData(uri);        startActivityForResult(intent, 123);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == 123) {            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                // 检查该权限是否已经获取                int i = ContextCompat.checkSelfPermission(this, permissions[0]);                // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝                if (i != PackageManager.PERMISSION_GRANTED) {                    goToAppSetting();                } else {                    Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();                }            }        }    }}

原创粉丝点击