什么时候getExternalStorageDirectory()。getPath()返回的不是" / sdcard /"?

时间:2015-01-15 12:45:36

标签: android android-sdcard

我从android lint收到警告:

Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead

我会解决这个问题,但仍需要知道:

在哪个(示例)设备上这是一个问题,您可以通过此调用获得哪些其他(示例)路径?如果这与特定设备无关,具体是什么或何时会发生?

在什么情况下我的应用可以写入哪个/sdcard/目录?

该应用拥有权利

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

3 个答案:

答案 0 :(得分:2)

  

您可以通过此次通话获得哪些其他(示例)路径?

部分地,它是制造商想要的任何东西。

部分地,它会根据运行您应用的用户帐户而有所不同。请记住,几年后(自Android 4.2发布以来),Android设备可以拥有多个用户帐户(平板电脑从4.2开始,手机从5.0开始)。每个用户都获得了内部和外部存储的不同位置,并且无法保证这些实际文件系统路径将指向这些路径。

永久硬编码根路径到内部或外部存储。始终使用适当的方法获取根位置,然后使用适当的File构造函数指向您想要的任何内容。

  

该应用拥有权利

由于Android中没有WRITE_INTERNAL_STORAGE权限,请将其删除。

答案 1 :(得分:1)

SD卡路径因不同的Android制造商而异。所以我在他们的手机上用朋友的SD卡进行自己的研究。结果:

Sony XPERIA X10i (我的手机)

  • Android 2.3.3(姜饼)
  • 手机内存路径:not available
  • sdcard的路径:/mnt/sdcard/

三星Galaxy S3 Mini&amp;三星Galaxy Young (同样的结果)

  • Android 4.2.2(JellyBean)
  • 手机内存路径:/storage/sdcard0/
  • sdcard的路径:/storage/extSdCard/

OPPO (我不记得她的手机类型是什么)

  • Android 4.2.2(JellyBean)
  • 手机内存路径:/storage/sdcard0/external_sd/
  • sdcard的路径:/sdcard0/

我把结果写在一本书里。所以我的建议是,永远不要将hardcode用于sdcard的路径。检查 here 以了解您的SD卡的路径。

答案 2 :(得分:0)

外部存储可能指向其他地方,

您可以将其他地方定义并安装为设备外部存储

它是一个配置选项,这就是为什么你有一个Lint警告。

例如,如果设备支持外部SD卡,则外部SD卡(getExteranlStorage())将指向他(外部sdcard将挂载在/ nmt / sdcard#/),顶部保持内部SD卡免费。

要说清楚

/ sdcard / == / mnt / sdcard [0] - &gt;内部SD卡

其他SD卡将安装在/mnt/sdcard [1..] / - &gt;外部SD卡

而且设备的制造也可以按照自己的意愿调用它(/ sdcard /只是一个必须具备的约定)