80,359
社区成员
发帖
与我相关
我的任务
分享
/**
* 获得下载目录,外部存储优先
*
* @param context 上下文
* @return File 目录文件对象
*/
public static File getDownloadFolder(Context context) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
&& !Environment.isExternalStorageRemovable()) {
return context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
} else {
return context.getDir(Environment.DIRECTORY_DOWNLOADS, Context.MODE_PRIVATE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == mRequestCode){
boolean isNotAllPermission = false;
for (int i = 0; i < permissions.length && i < grantResults.length; i++) {
//记录是否有权限选项用户没有给权限
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
isNotAllPermission = true;
break;
}
}
if (isNotAllPermission) {
Log.d(tag,"没有获得全部授权,会影响应用使用");
//todo
}
}
}
private final static int mRequestCode = 10000;//权限请求码,自行定义,主要是当系统回调的时候会带回,用于区分
public static void checkPermisstion(Activity activity, String[] permissions) {
Log.d(tag, "开始检查权限:" + Build.VERSION.SDK_INT);
List<String> mPermissionList = new ArrayList<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.d(tag, "需要动态授权");
mPermissionList.clear();
//逐个判断你要的权限是否已经通过
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);//添加还未授予的权限
Log.d(tag, "未授权:" + permissions[i]);
} else {
Log.d(tag, "已有权限:" + permissions[i]);
}
}
//申请权限
if (mPermissionList.size() > 0) {//有权限没有通过,需要申请
ActivityCompat.requestPermissions(activity, permissions, mRequestCode);
}
}
}
//然后在需要得地方申请,例如activity的onStart
@Override
protected void onStart() {
super.onStart();
Log.d(tag, "主界面onStart");
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};//这里是数组,可以同时申请多个权限
checkPermisstion(this, permissions);
}