网站客服:zx81024163 |

Android 中 视频存储路径的一个方案

2023-04-25 14:08:21发布    浏览438次    信息编号:49636

友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。

Android 中 视频存储路径的一个方案

在下载视频的时候,我们经常会面临存储路径的选择。 选择一个好的存储路径可以优化系统中的内存。 主流APP下载路径分析及常见路径选择方案总结如下:

下面提供一个APP的视频存储路径方案。 具体程序的程序流程图如下:

系统中数据存储路径概览:

主要分为内部存储和外部存储两部分

内部存储 ( ) 不是内存。 内部存储位于系统中一个非常特殊的地方。 如果你想将文件存储在内部存储中,默认情况下这些文件只能被你的应用程序访问,并且应用程序创建的所有文件都与应用程序具有相同的包名。 根据内容。 卸载应用程序时,内部存储中的这些文件也会被删除。 从技术上讲,如果你在创建内部存储文件时将文件属性设置为可读,其他应用程序就可以访问自己应用程序的数据,前提是他们知道你应用程序的包名手机视频下载路径手机视频下载路径,如果文件的属性是() ,那么其他应用程序即使知道包名也无法访问它。 内部存储空间是有限的,所以很有价值,同时也是系统本身和系统应用程序的主要数据存储所在,一旦内部存储空间耗尽,手机就无法使用。 所以对于内部存储空间,我们应该尽量避免使用。 数据库和数据库都存储在内部存储空间中。

存放路径:一般为data/data/包名/下的文件

外置存储( ),我们很容易认为机身内置存储是内部存储,而扩展的T卡是外部存储。 比如我们16GB版的Nexus 4,内部存储有16G,普通消费者可以理解,但是在编程中却不是,16GB还是外存。 在早期的设备中,当时的设备内部存储确实是固定的,外部存储确实可以像U盘一样移动。 但在后来的设备中,很多中高端机都将机身存储扩展到8G以上,概念上将存储分为“内部”和“外部”两部分,但实际上都在内部电话。

存储路径:/sd卡//data//根目录下的文件,不同机型具体路径不同

2、以上APP流程图详解

(1)检测sd卡是否存在并安装

/**
* 某路径的sd卡是否存在
* */
public static boolean isSdcardExist(Context context, String path) {
 boolean isSdcardExist = false;
 List pathList = getExternalSdPath(context);
 if(!TextUtils.isEmpty(path) && path.equals(SDCARD_PATH)) {
    isSdcardExist = true;
 } else if(pathList != null && pathList.size() > 0) {
    for(int i = 0; i < pathList.size(); i++) {
       if(pathList.get(i).equals(path)) {
          isSdcardExist = true;
          break;
       }
    }
 }
 return isSdcardExist;
}

/**
 * sd卡是否安装
 */
public static boolean isSDCardMounted() {
   return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}

操作外部存储时,首先判断是否有sd卡并安装(),并添加如下权限:

(2)检测安装的sd卡数量

手机的外部存储是SD卡。 手机内部一般都有内置的SD卡。 比如手机有16G内存。 有些手机还支持插入外置SD卡,所以通过.()方法获取内置存储卡的位置。 我们还需要写一个特殊的方法来获取外部存储卡的路径。 然而,如今市场上配备micro SD存储卡插槽的手机越来越少。 就连一贯坚持这种设计的三星,也在今年的S6和S6 Edge上放弃了这一功能,改用内置存储。 也有很少的手机有多个sd卡(这里不考虑)。

/**
 * 获取手机中sd卡个数
 * */
private static int getSdcardCount(Context context) {
   int sdCount = 0;
   List pathList = SDCardUtils.getExternalSdPath(context);
   if(SDCardUtils.isSDCardMounted()) {
      sdCount = 1;
      if(pathList != null && pathList.size() > 0) {
         sdCount = pathList.size() + 1;
      }
   } else {
      if(pathList != null && pathList.size() > 0) {
         sdCount = pathList.size();
      }
   }
   return sdCount;
}

(3)获取内置SD卡的路径和剩余容量

 * sd卡路径
 */
public final static String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();

/**
 * 获取sd卡剩余空间大小,单位为M
 * */
public static double getSdAvailStorage(Context context, String sdPath) {
   double availStorage = 0;
   if(isSdcardExist(context, sdPath)) {
      StatFs sf = new StatFs(sdPath);
      long blockSize = sf.getBlockSize(); 
      long availCount = sf.getAvailableBlocks();
      availStorage = availCount*blockSize/1024/1024;
   }
       return availStorage;
}

(3)获取外置sd卡的路径

/**
 * 获取外置SD卡路径
 * 
 */
public List getExtSDCardPath()
{
   List lResult = new ArrayList();
   try {
      Runtime rt = Runtime.getRuntime();
      Process proc = rt.exec("mount");
      InputStream is = proc.getInputStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      String line;
      while ((line = br.readLine()) != null) {
         if (line.contains("extSdCard"))
         {
            String [] arr = line.split(" ");
            String path = arr[1];
            File file = new File(path);
            if (file.isDirectory())
            {
               lResult.add(path);
            }
         }
      }
      isr.close();
   } catch (Exception e) {
   }
   return lResult;
}

(3) 外接SD卡存储相关问题

.4系统以后缓存路径切换到外置SD卡时,无法下载视频。 原因是从.4开始,限制了第三方应用对外接SD卡的读写权限,使其向着标准化的方向发展。 如果要读写外置sd卡,只能在sd卡根目录下的/data/目录下进行读写操作。 所以一般不建议存储到外置sd卡。

(4)新建视频文件夹,用于存放视频

    /**
    * android4.4后,SD 卡下载的系统目录
    */
   public static String getSysDownLoadFolder(Context context, String path) {
      StringBuilder sb = new StringBuilder();
      sb.append("Android/data/").append(context.getPackageName()).append(path).toString();
      return sb.toString();
   }
}
/*
   * 在SD卡上创建目录;
   */
public File createDIR(String dirpath) {
    File dir=new File(SDPATH+dirpath);
    dir.mkdir();
    return dir;
}

提醒:请联系我时一定说明是从星空网上看到的!