Внешнее хранилище не указывает на большую внутреннюю SD-карту

Я проверяю, смонтировано ли внешнее хранилище и доступно ли оно для чтения/записи, а затем читаю из него. Я использую точный официальный образец кода Android (отсюда).

Пишет, что внешнее хранилище не подключено. getExternalFilesDir(null) возвращает null.

Во-первых, я испытал это с HTC One V, в который не была вставлена ​​внешняя SD-карта (но внутри было много места для хранения).

Теперь я испытываю то же самое на планшете WayteQ xTAB-70dci, в котором есть огромная «внутренняя SD-карта» (так ее называет планшет), но не вставлена ​​​​внешняя SD-карта.

В обоих случаях стандартные API Android (getExternalStorageState(), getExternalFilesDir() и т. д.) возвращают false.

Я абсолютно сыт по горло. Очевидно, что пользователи, которые платят за мое приложение (игру с большим количеством графики), будут ожидать, что оно будет правильно установлено на их телефон/планшет с большой внутренней SD-картой (например, WayteQ).

Что здесь не так? Почему эти устройства (HTC, WayteQ, да ладно!) указывают на внешнюю SD-карту (которая обычно отсутствует в продукте по умолчанию) вместо огромного внутреннего SD-накопителя? Совершенно нелогично и даже вредно. Что я могу сделать, есть ли стандартный обходной путь для этого?


person Thomas Calc    schedule 24.05.2013    source источник
comment
См.: stackoverflow.com/questions/15425574/, но в основном ответ заключается в том, что поведение, когда доступны оба варианта, зависит от производителя устройства. .   -  person Jules    schedule 24.05.2013


Ответы (1)


Как говорится, это зависит от производителя устройства. Я верю, что хитрость с внутренними/внешними точками хранения делает Samsung на своих телефонах.

В дополнение к проверке доступности внешнего, вам нужно будет проверить размер каталога /data, чтобы увидеть, можете ли вы кэшировать свое приложение во внутренней части. См. здесь. Я предполагаю, что вы все равно загружаете остальную часть приложения по запросу из-за ограничений на размер файла, верно?

Дополнительная информация: это не должно вас сильно беспокоить, но вы, как хороший разработчик, тоже можете принять это во внимание. Некоторые люди используют сценарии CronMod, которые монтируют разные папки во внешнем хранилище. Так у них места больше. Отлично, правда? Проблема возникает, когда вы используете другую версию и /data/data находится на SD (которая на телефоне отображается как большая внутренняя память), но /data/cache все еще находится на внутренней для скорости. Внезапно у вас может не оказаться реальных, достоверных данных о внутреннем размере кэша. Но опять же, это делают в основном опытные пользователи, которые должны иметь представление о том, что происходит.

person Joel Bodega    schedule 24.05.2013
comment
По краткому чтению документов If the files are not on the device, use Google Play's Application Licensing service to request URLs for the expansion files, then download and save them. я предполагаю, что API, читающий файлы расширения, предполагает, что они находятся на внешнем. Если у вас есть URL-адреса, вы можете записывать файлы в любом месте, если вы обрабатываете логику их чтения. - person Joel Bodega; 25.05.2013