Jireh程序猿的那些事 Jireh程序猿的那些事

记录分享生活、程序、信息的精彩人生

目录
Android实现实时定位并发送信息至服务器之动态权限(三)
/    

Android实现实时定位并发送信息至服务器之动态权限(三)

这篇讲下权限的动态申请,在 Android6.0 以后权限机制分为两类,Normal Permissions,这类权限是不需要用户授权,不会触及用户的隐私,只需要在 manefest 里面申请即可;还有一类是 Dangerous Permissions,即动态申请。

实现的方式也有很多,普通的或者更多的封装第三方库。

权限申请的流程

1.在 AndroidManifest 里面配置需要的权限,无论是普通的还是特殊的权限都需要在这里配置。

2.检查权限,如果没有权限则申请

3.给用户申请权限的解释,这个方法只会在第一次用户拒绝授权,再次去申请这个的权限时会用到

4.申请相应的权限

5.处理申请权限的回调,在这里获得哪些授权成功哪些失败,处理需要的逻辑

普通的方式[申请电话权限]

public class Main2Activity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main2);  
  
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)  
                != PackageManager.PERMISSION_GRANTED) {//未获取权限  
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {  
                //当用户第一次申请拒绝时,再次申请该权限调用  
                Toast.makeText(this, "拨打电话权限", Toast.LENGTH_SHORT).show();  
            }  
            //申请权限  
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0x01);  
        } else {//已经获得了权限  
            call();  
        }  
    }  
  
    private void call() {  
        Toast.makeText(this, "打电话", Toast.LENGTH_SHORT).show();  
    }  
  
    @Override  
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);  
        if (requestCode == 0x01) {  
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//授权成功  
                call();  
            } else {//授权失败  
                Toast.makeText(this, "获取权限失败", Toast.LENGTH_SHORT).show();  
            }  
        }  
    }  
}

封装的第三方库,这里我用的是 EasyPermissions,调用也非常的方便

compile 'pub.devrel:easypermissions:0.1.5'

在 Activite 中调用

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {  
  
    private static final String TAG = "lzy";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        //所要申请的权限  
        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE};  
          
        if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限  
            Log.i(TAG, "已获取权限");  
        } else {  
            //第二个参数是被拒绝后再次申请该权限的解释  
            //第三个参数是请求码  
            //第四个参数是要申请的权限  
            EasyPermissions.requestPermissions(this, "必要的权限", 0, perms);  
        }  
    }  
  
    @Override  
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);  
        //把申请权限的回调交由EasyPermissions处理  
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);  
    }  
  
    //下面两个方法是实现EasyPermissions的EasyPermissions.PermissionCallbacks接口  
    //分别返回授权成功和失败的权限  
    @Override  
    public void onPermissionsGranted(int requestCode, List<String> perms) {  
        Log.i(TAG, "获取成功的权限" + perms);  
    }  
  
    @Override  
    public void onPermissionsDenied(int requestCode, List<String> perms) {  
        Log.i(TAG, "获取失败的权限" + perms);  
    }  
}

如果觉得这篇文章不错的话,请我喝一杯 咖啡☕吧
标题:Android实现实时定位并发送信息至服务器之动态权限(三)
作者:Jireh
地址:https://www.lyile.cn/articles/2020/03/10/1583805209640.html
本作品由 Jireh 采用 署名 – 非商业性使用 – 禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。