Android 动态获取存储、位置、电话的权限(附代码)

       今天客户提出上传信息时需携带经纬度,且需要两种获取位置的方式;故经思考使用了GPS和网络获取位置,但在经过实地测试的时候才发现没写获取权限。

      便在登录界面加上获取权限代码,此次获取的是存储、位置、电话的权限,如有其它需求可按此格式来进行添加。

      首先在 onCreate部分添加判断语句及引用。

//判断是否为android6.0系统版本,如果是,需要动态添加权限
if (Build.VERSION.SDK_INT>=23){
    showContacts();
}

其次便可根据判断语句来进行编写,下方有注释,不多言,附代码,有疑问可留言或私聊。

private static final int BAIDU_READ_PHONE_STATE =100;
//请求权限
public void showContacts(){
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS)
            != PackageManager.PERMISSION_GRANTED
            || ActivityCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE)
            != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(getApplicationContext(),"没有权限,请手动开启定位权限",Toast.LENGTH_SHORT).show();
        // 申请一个(或多个)权限,并提供用于回调返回的获取码(用户定义)
        ActivityCompat.requestPermissions(NearStation.this,new String[]{
                Manifest.permission.INTERNET,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.ACCESS_NETWORK_STATE,
                Manifest.permission.ACCESS_WIFI_STATE,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
                Manifest.permission.CHANGE_WIFI_STATE
        }, BAIDU_READ_PHONE_STATE);
    }else{
        startLocation();
    }
}
//Android6.0申请权限的回调方法
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        // requestCode即所声明的权限获取码,在checkSelfPermission时传入
        case BAIDU_READ_PHONE_STATE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 获取到权限,作相应处理(调用定位SDK应当确保相关权限均被授权,否则可能引起定位失败)
                startLocation();
            } else {
                // 没有获取到权限,做特殊处理
                Toast.makeText(getApplicationContext(), "获取位置权限失败,请手动开启", Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            break;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42270094/article/details/83014912
今日推荐