Android——外部存储+动态权限
介绍
Android对外部存储需要静态权限和动态权限。涉及五个类:Environment ,ActivityCompat,Manifest.permission ,PackManger,FileOutStream
Environment:环境类,检查外部存储环境和获取存储路径
AcitivityCompat:活动兼容类,检查和获取动态权限
Manifest.permission:权限类型
PackManger:包管理器
FileOutputStream:文件输出流
属性:
( Environment )
MEDIA_MOUNTED:挂载参数
(PackManger)
PERMSSION_GRANTED:权限确定参数
(Manifest.permission)
WRITE_EXTERNAL_STORAGE:写入权限
READ_EXTERNAL_STORAGE:读取权限
方法
(Environment)
String getExternalStorageState()
参数:无
返回值:String
返回值意义:返回外部存储挂载状态
作用:获取外部存储挂载状态
String getExternalStorageDirectory()
参数:无
返回值:String
返回值意义:返回外部存储的文件路径
作用:获取外部存储的文件路径
(ActivityCompat)
String checkSelfPermission( Context context , String perssion )
参数:
Context context:上下文
String perssion:权限类型
返回值:String
返回值意义:是否拥有此权限
作用:检查是否拥有此权限
void requestPermissions(Activity activity, String [] permissions , int requestCode )
参数:
Activity activity:活动对象
String[] permissions:权限申请字符串数组
int requestCode:请求代码
返回值:无
返回值意义:无
作用:获取动态权限
对权限请求后的回调方法
Activity.onRequestPermissionResult(int requestCode, String[] permission, int[] grantResults)
参数:
int requestCode:请求代码
String[] permission:可能是请求权限数组
int[] grantResults:是否给予了权限。grantResults[0] == PackMannager.PERMISSION_GRANTED 就是给予权限,需要预先判断
使用
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},200);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 先判断是否允许,再根据代码分类处理
if( grantResults[0] == PackageManager.PERMISSION_GRANTED){
switch (requestCode){
case 200:
Log.i(TAG, "onRequestPermissionsResult: 给予了权限");
break;
}
}else {
Toast.makeText(this,"未获得权限",Toast.LENGTH_SHORT).show();
}
}
外部的存储路径为 scard/xxx(name)