当前位置: 代码迷 >> 综合 >> Android 通过Context、Environment 获取内置和外置文件夹位置
  详细解决方案

Android 通过Context、Environment 获取内置和外置文件夹位置

热度:16   发布时间:2023-10-23 05:33:54.0
Android开发中使用到的文件夹主要分为内置和外置储存空间,这里的内置储存空间和外置储存空间不是指系统储存空间和外置SD卡储存空间。 在Android开发过程中一般外置储存空间是指在手机文件管理软件中可以直接看到的储存空间,内置储存空间是指系统及其相关的文件目录在一般的文件管理软件是看不到的,内置储存空间一般是用户没有操作权限的目录
因为不同的厂商对Android系统进行了修改,所以Android指定功能目录的位置不是绝对的, Android开发中一般使用Context对象或者Environment 中的静态函数获取文件夹的位置。
内置储存特殊文件夹:
1、/data/data/
这个文件夹是应用在系统的位置
/data/data/<package_name>/cache      应用缓存
/data/data/<package_name>/lib           当前应用使用的动态链接库对应abi的软连接
/data/data/<package_name>/files/..     应用使用到的文件目录
外置储存特殊文件夹:
1、外置储存位置
/storage/emulated/0/  当前目录是在文件管理器中看到的目录  
在根目录有一个软连接/sdcard/     
       2、外置储存中的Android文件夹
/storage/emulated/0/Android               当前文件是在外置储存空间中,所以文件管理关键中是可以看到的
/storage/emulated/0/Android/cache    默认的外部缓存空间
/storage/emulated/0/Android/data/<package_name>                应用操作的外部储存空间
/storage/emulated/0/Android/data/<package_name>/cache      应用的外部缓存空间
/storage/emulated/0/Android/data/<package_name>/files/..      应用的外部储存空间中可操作文件夹
      3、位置储存中的九大公有目录
九大公有目录是指系统的默认分类文件夹都在外置储存空间。
例如:
/storage/emulated/0/DCIM(相册)
/storage/emulated/0/Download(下载)
/storage/emulated/0/Music(音乐)
....
一、使用Context对象获取目录位置
      使用Context对象获取的一般都是相对于当前应用的路径,此类文件夹操作一般不需要动态获取文件读写操作,此类文件在应用卸载后也会被删除。                 
      1)特殊内置文件夹
1、用于获取APP的所在包目录context.getPackageName() 
2、来获得当前应用程序对应的 apk 文件的路径context.getPackageCodePath() 
3、获取该程序的安装包路径context.getPackageResourcePath() 
4、/data/user/0/应用包名/databases/参数名【通过Context.openOrCreateDatabase创建】context.getDatabasePath()  

            2)内置储存

1、/data/user/0/应用包名/app_参数名context.getDir(String name, int mode)
2、/data/data/<application package>/cache目录context.getCacheDir() 
3、/data/data/<package>/filescontext.getFilesDir()context.getFileStreamPath(String name) context.getCodeCacheDir()

            3)外置储存

1、/sdcard/Android/data/<package>/cacheContext.getExternalCacheDir() 
2、/mnt/sdcard/Android/obb/<application package> obb目录(游戏数据包) Context.getObbDir()
3、storage/sdcard/Android/data/包名/files/....Context.getExternalFilesDir(Environment.DIRECTORY_MUSIC);

    二、使用Environment 静态函数获取目录位置

     由于不同Android系统厂商的绝对路径不同,所以使用Environment静态函数获取指定文件夹位置
1)特殊外置文件夹
1、获得系统目录/system
Environment.getRootDirectory()

            2)内置储存

2、获得根目录/data/data 内部存储路径Environment.getDataDirectory() 
3、获得缓存目录/data/cacheEnvironment.getDownloadCacheDirectory()

            3)外置储存

1、获得SD卡目录/mnt/sdcardEnvironment.getExternalStorageDirectory()
2、获取SD卡的状态   Environment.getExternalStorageState();MEDIA_BAD_REMOVAL  表明SDCard 被卸载前己被移除MEDIA_CHECKING	表明对象正在磁盘检查。MEDIA_MOUNTED	表明对象是否存在并具有读/写权限MEDIA_MOUNTED_READ_ONLY	表明对象权限为只读MEDIA_NOFS	表明对象为空白或正在使用不受支持的文件系统。MEDIA_REMOVED	如果不存在 SDCard 返回MEDIA_SHARED	如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回MEDIA_UNMOUNTABLE	返回 SDCard 不可被安装 SDCard 是存在但不可以被安装MEDIA_UNMOUNTED	返回 SDCard 已卸掉如果 SDCard 是存在但是没有被安装3、获取外部公有目录【九大类】Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);DIRECTORY_ALARMS //警报的铃声DIRECTORY_DCIM //相机拍摄的图片和视频保存的位置DIRECTORY_DOWNLOADS //下载文件保存的位置DIRECTORY_MOVIES //电影保存的位置, 比如 通过google play下载的电影DIRECTORY_MUSIC //音乐保存的位置DIRECTORY_NOTIFICATIONS //通知音保存的位置DIRECTORY_PICTURES //下载的图片保存的位置DIRECTORY_PODCASTS //用于保存podcast(博客)的音频文件DIRECTORY_RINGTONES //保存铃声的位置

 

  相关解决方案