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)

posted @ 2021-08-15 08:05  remix_alone  阅读(756)  评论(0)    收藏  举报