Android 读取或者写入U盘时,报错:Permission denied

**

以下所有操作的前提是: android 系统已经root

**

最近在将文件拷贝到U盘时总是 写入失败(Permission denied)

程序清单中已经加入了权限

  
  

并且动态申请了权限

 private static String[] PERMISSIONS_REQ = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };
    private static final int REQUEST_CODE_PERMISSION = 1;
    
int write_permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int read_permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
       
if ( write_permission != PackageManager.PERMISSION_GRANTED ||
     read_permission != PackageManager.PERMISSION_GRANTED ) {
 	          ActivityCompat.requestPermissions(activity, PERMISSIONS_REQ, REQUEST_CODE_PERMISSION);                
 }

有人说要修改 system\etc\permissions\platform.xml (安装RE文件管理器,即可修改(必须root))中的



修改为

  
  	
  	
  
  
	 
  	 
  

重启之后还是报错

在纠结之后 …

最后发现 程序识别到的U盘目录是  /storage/28BA-794A    (28BA-794A 是我的U盘名字) 
但是系统中还有一个相同名字的U盘    那就是/mnt/media_rw/28BA-794A

修改目录为/mnt/media_rw/ 后,文件成功写入到U盘中

下面提供一种查找 /mnt/media_rw/ 目录下U盘的方式

try{
    StorageManager storageManager = (StorageManager) m_context.getSystemService(Context.STORAGE_SERVICE);
    Class storeManagerClazz = Class.forName("android.os.storage.StorageManager");
    Method getVolumesMethod = storeManagerClazz.getMethod("getVolumes");
    List volumeInfos  = (List)getVolumesMethod.invoke(storageManager);
    Class volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
    Field udiskPath = volumeInfoClazz.getDeclaredField("internalPath");
    Method getFsUuidMethod = volumeInfoClazz.getMethod("getFsUuid");
     
    if(volumeInfos != null){
    	 for(Object volumeInfo:volumeInfos){
             String uuid = (String)getFsUuidMethod.invoke(volumeInfo);
             if(uuid != null){
                  String sUdiskPath = (String)udiskPath.get(volumeInfo);  // 结果是 /mnt/media_rw/28BA-794A
                  return sUdiskPath;
             }
        }
     }
   }catch(Exception e){
        Log.e(TAG," check udisk error = " + e.getMessage());
 }

最后,通过反复验证
要操作U盘等外设

  1. 系统要具有root权限
  2. 修改system\etc\permissions\platform.xml



     
 

     
 
 
修改之后需要重启系统
  1. 就是操作的目录要正确

你可能感兴趣的:(Android 读取或者写入U盘时,报错:Permission denied)