car-eye 行车记录仪中的外部存储卡操作

在行车记录仪中,android各个版本对外部存储卡存在着权限上的限制,对获取卡的位置存在不同SDK版本上的差异,car-eye行车记录仪为了保持兼容性。做了最全面的处理:

获取卡的位置:

 public  String[] initDisk(Context context) {  
       String sd = null; 
       Class<?> storageVolumeClazz = null;  
       ArrayList<String> lineByteList = new ArrayList<String>();
       try { 
       StorageManager storageManager = (StorageManager) context  
               .getSystemService(Context.STORAGE_SERVICE);  
       storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");  
       Method getVolumeList = StorageManager.class.getDeclaredMethod("getVolumeList");              
       Method isRemovable = storageVolumeClazz.getMethod("isRemovable");  
       Method getPath = storageVolumeClazz.getMethod("getPath");  
       Object  volumes = getVolumeList.invoke(storageManager);
       Method getVolumeState = StorageManager.class.getDeclaredMethod("getVolumeState", String.class); 
       final int length = Array.getLength(volumes);        
       for (int i = 0; i < length; i++) 
       {                   
        Object storageVolumeElement  = Array.get(volumes, i);              
        String path = (String) getPath.invoke(storageVolumeElement);  
            String state = (String) getVolumeState.invoke(storageManager, path); 
            boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);  
                if(Environment.MEDIA_MOUNTED.equals(state) && removable)
                {
                lineByteList.add(path);
                Log.d(tag, "Disk path  : " + path);
                }              
          
         }  
       } catch (Exception e)
       {  
                   Log.e(tag, e.getMessage());  
       }  
       path = new String [lineByteList.size()];
       for(int j = 0;j < lineByteList.size(); j++ ){
        path[j] = lineByteList.get(j);        
       }        
       return path;  

   }  

 权限:

public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);


   if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}

}

对于6.0以上的ANDROID OS:

   if(version>=23)
{
verifyStoragePermissions(MainActivity.this);

}

同时在manifest中申明对卡的访问的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


这样就可以动态的获得卡的位置并对外部存储卡进行操作了。需要注意的是,如果还不能对卡进行读写

那么请对android设备进行root处理。

这样就能正常的访问外部存储卡了。

相关代码下载https://github.com/Car-eye-team  欢迎加入技术讨论群:590411159 







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值