我想在android中存储文件。通过以下流程: -
if(sd card is available){
//Store in sd card...
}else{
//If sd card is not available...
//Store in phone memory..
}
问题基本上是否有办法访问SD卡和内存路径?
我理解
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File destinationDirForChequeImageInInternalMemory = cw.getDir("dirName", Context.MODE_PRIVATE);
始终提供内部存储位置。
是否保证存储位置在手机存储器中?
Environment.getExternalStorageDirectory()
以上行是否总是提供SD卡路径? 如果不是它返回什么? 有没有办法获得SD卡位置? (如果Environment.getExternalStorageDirectory返回手机内存路径,尽管设备中有sd卡。)
请详细了解如何执行此操作?
答案 0 :(得分:1)
只需阅读上面的android文档。
https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()
getExternalStorageDirectory
在API级别1中添加文件getExternalStorageDirectory()返回 主共享/外部存储目录。这个目录可能没有 如果用户已将其安装在其上,则目前可以访问 电脑,已从设备中删除,或其他一些问题 发生了。您可以使用确定其当前状态 getExternalStorageState()。
注意:这里不要混淆“外部”这个词。这个目录 可以更好地被视为媒体/共享存储。它是一个文件系统 可以容纳相对大量的数据,并且可以共享 所有应用程序(不强制执行权限)。传统上这是 SD卡,但它也可以作为内置存储器实现 与受保护的内部存储区别的设备,可以是 作为文件系统安装在计算机上。
在具有多个用户的设备上(如UserManager所述) 用户拥有自己独立的共享存储。应用程序只有 访问他们正在运行的用户的共享存储。
在具有多个共享/外部存储目录的设备中,这个 directory表示用户将与之交互的主存储 用。可通过访问二级存储 getExternalFilesDirs(String),getExternalCacheDirs()和 getExternalMediaDirs()。
应用程序不应直接使用此顶级目录 以避免污染用户的根命名空间。任何文件 私有应用程序应放在由返回的目录中 Context.getExternalFilesDir,系统将负责处理 删除应用程序是否已卸载。其他共享文件应该 被放置在其中一个目录中 getExternalStoragePublicDirectory(字符串)。
写入此路径需要WRITE_EXTERNAL_STORAGE权限, 并且从KITKAT开始,读访问需要READ_EXTERNAL_STORAGE 权限,如果您持有写入,则自动授予 权限。
从KITKAT开始,如果您的应用程序只需要存储内部 数据,考虑使用getExternalFilesDir(String), getExternalCacheDir()或getExternalMediaDirs(),它们不需要 读或写的权限。
此路径可能会在平台版本之间发生变化,因此应用程序应该 只坚持相对路径。