11

我有一堆来自不同供应商的 Android 设备。

其中一些将 /mnt/sdcard 附加到内部存储,将 /mnt/extsd 附加到外部存储(场景 1),其他将 /mnt/sdcard 附加到外部存储(场景 2)

我认为第二种情况是标准的,因为 Android API 提供了该路径的句柄。现在的问题是,在场景 1 中,/mnt/extsd即使readonly得到了WRITE_EXTERNAL_STORAGE许可!

这意味着我只能从实际的外部 sd 卡中读取数据而无法写入。

是否有解决方法,以便我可以写入 extsd 文件夹?

4

3 回答 3

4
Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"

Environment.getExternalStorageDirectory()指的是设备制造商认为是“外部存储”的任何东西。在某些设备上,这是可移动媒体,例如 SD 卡。在某些设备上,这是设备上闪存的一部分。在这里,“外部存储”是指“安装在主机上时可通过 USB 大容量存储模式访问的东西”,至少对于 Android 2.x 及更高版本。

But the question is about external SD. How to get a path like "/mnt/sdcard/external_sd" (it may differ from device to device)?

如上所述,除了外部存储,Android 没有“外部 SD”的概念。

如果设备制造商选择将外部存储设备作为板载闪存并且还具有 SD 卡,则您需要联系该制造商以确定您是否可以使用 SD 卡(不保证)以及规则的用途使用它,例如使用什么路径。

于 2013-03-15T07:02:39.143 回答
4

在有根设备上,您可以更改 /system/etc/permissions/platform.xml 以“修复”权限问题。以下对我有用:

  • adb 拉 /system/etc/permissions/platform.xml
  • 修改 platform.xml,使 media_rw 包含在 WRITE_EXTERNAL_STORAGE 权限中,如下所示:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
       <group gid="sdcard_rw" />
       <group gid="media_rw" />
    </permission>
    
  • adb push platform.xml /system/etc/permissions/platform.xml

  • 重启设备
于 2013-05-09T21:23:59.520 回答
0

到目前为止,我发现在设备上获得写访问权限的唯一解决方法是使设备生根:(

三星提供了一个带有清单条目的解决方法

更多详细信息可在以下链接中找到

http://www.xda-developers.com/android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/

http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/

摘录:

Google 似乎在 Android 3.2 前后引入的 AOSP 代码中有一个错误,这会影响操作系统处理 USB 存储的方式,并可能阻止对 SD 卡和 USB 记忆棒的写入访问。XDA Elite 认可开发者、高级版主和新闻作家 Chainfire 在他的博客文章中总结了这个问题:

“过去,应用程序会请求“WRITE_EXTERNAL_STORAGE”权限,这将授予对所有外部存储(用户/组“sdcard_rw”)的写访问权限。这显然已更改为仅授予对主外部存储的写访问权限。引入了第二个权限,称为“WRITE_MEDIA_STORAGE”,它将授予对其他外部存储(用户/组“media_rw”)的访问权限。

问题是,第三方实际上不会被授予此权限,只有系统应用程序和设备制造商提供的应用程序通常会被授予此权限。也有例外,显然在某些设备上第三方应用程序会被授予此权限,但根据 AOSP 消息来源,他们当然不应该这样做。”

于 2013-03-19T07:07:41.027 回答