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); } }
目前的权限分组,组中一个权限被申请后,其余权限也都有了。
