gpt4 book ai didi

Android 外部存储与 SD 卡

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:35 30 4
gpt4 key购买 nike

阅读有关存储文件的 Android 文档后,我发现外部存储可以包括可移动的 SD 卡和设备内部的存储,即不可移动的。在选择将文件保存到外部存储时,有没有办法区分可移动存储和不可移动存储?

最佳答案

我认为您无法可靠地区分内部和外部 (SD) 存储。

乍一看,您似乎可以使用 Environment.isExternalStorageRemovable() 之类的东西,但这并不可靠,因为您的“主要外部”存储设备很可能是设备的内部存储器,而不是 SD 卡。

Environment.getExternalStorageDirectory() 的文档状态:

Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.

例如,我的 LG G4 安装了一个外接 SD 卡,我可以使用 adb (external_SD) 查看它:

$ adb shell ls -la /storage/
drwx------ root root 2015-02-28 01:10 USBstorage1
drwx------ root root 2015-02-28 01:10 USBstorage2
drwx------ root root 2015-02-28 01:10 USBstorage3
drwx------ root root 2015-02-28 01:10 USBstorage4
drwx------ root root 2015-02-28 01:10 USBstorage5
drwx------ root root 2015-02-28 01:10 USBstorage6
dr-xr-xr-x root root 2015-02-28 01:10 emulated
drwxrwx--x root sdcard_r 2015-07-31 08:19 external_SD
lrwxrwxrwx root root 2015-02-28 01:10 sdcard0 -> /storage/emulated/legacy

但是,用于外部存储的各种 API 返回值证明设备正在使用内部存储器作为其“主要外部”存储:

  • Environment.getExternalStorageState:已安装
  • Environment.isExternalStorageEmulated:true
  • Environment.isExternalStorageRemovable:
  • Context.getExternalCacheDir:/storage/emulated/0/Android/data/com.codeblast.storagetype/cache
  • Context.getExternalFilesDir:/storage/仿真/0/Android/data/com.codeblast.storagetype/files

在没有外部 SD 卡的模拟器上运行代码返回完全相同的结果。

所以你不能假设 /mnt/sdcard 表示物理 SD 卡。

您可能已经重新考虑了您实际尝试完成的任务,而不是尝试检测存储类型。 :-)

关于Android 外部存储与 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31757895/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com