String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(OkHttpTest.this, permissions, REQUEST_CODE_CONTACT);
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    Log.i("asdfg", "没有权限!");
}
这几天在学习OkHttp,涉及到文件的上传下载,下载的时候通过上面代码申请权限,Log打印没有权限,搞不懂为什么,所以来请教一下各位大神。

解决方案 »

  1.   

    onCreate中:if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }回调方法:
    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {
            switch (requestCode){
                case 1:
                    if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED){
                        Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                    break;
                default:
                    break;
            }
        }同时记得在manife中添加权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    这样就可以了。
      

  2.   

    android 6.0以后一些危险权限 要在代码中动态申请,不能只在Manifest中添加
      

  3.   

    读写存储卡权限是属于危险权限,6.0以后需要动态申请权限,需要你自己来申请,因为申请权限时基于页面的,okhttp没法进行申请。