Android6.0以上并不能直接创建文件或者文件夹,需要手动申请相关权限(拨打电话等都需要)
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
/**
* 6.0+权限工具类
* Created by Jing on 2017/3/10.
*/
public class PermissionsUtil {
public static final int REQUEST_WRITE_EXTERNAL_STORAGE = 300; //写入外部存储
public static final int REQUEST_MOUNT_UNMOUNT_FILESYSTEMS = 301; //挂载文件系统
public static final int REQUEST_ACCESS_NETWORK_STATE = 302;
public static final int REQUEST_ACCESS_WIFI_STATE = 303;
public static final int REQUEST_READ_PHONE_STATE = 304; //读取电话状态
/**
* 判断是否有权限
* PackageManager.PERMISSION_GRANTED 授予权限
* PackageManager.PERMISSION_DENIED 缺少权限
*/
public boolean checkPermissions(Context context, String permission) {
return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
}
/**
* 6.0+申请权限,必须传入activity
*
* @param activity
* @param permission
* @param requestCode
* @param listener
*/
public void requestPermissions(Activity activity, String permission, int requestCode, OnPermissionGrantedListener listener) {
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);
} else {
//权限已有,直接调用
if (listener != null)
listener.OnPermission();
}
} else {
//6.0以下直接调用
if (listener != null)
listener.OnPermission();
}
}
/**
* 单纯申请权限
*
* @param activity
* @param permission
* @param requestCode
*/
public void requestPermissions(Activity activity, String permission, int requestCode) {
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);
}
}
}
public interface OnPermissionGrantedListener {
void OnPermission();
}
}
申请权限必须要在Activity中申请,并在其中重写onRequestPermissionsResult方法
//申请文件写入权限,创建文件夹
new PermissionsUtil().requestPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,
PermissionsUtil.REQUEST_WRITE_EXTERNAL_STORAGE, new PermissionsUtil.OnPermissionGrantedListener() {
@Override
public void OnPermission() {
//createFile();
}
});
Activity中重写权限反馈方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PermissionsUtil.REQUEST_WRITE_EXTERNAL_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//createFile();
} else {
//CommonUtil.showToast(this, "文件写入权限被拒绝,无法使用头像上传等功能");
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
目前的权限分组,组中一个权限被申请后,其余权限也都有了。