Android низкоуровневое чтение SD-карты больше 2 ГБ - PullRequest
8 голосов
/ 06 марта 2012

Мое приложение Android пытается прочитать физические сектора SD-карты путем доступа к реальному устройству (в моем случае, / dev / block / vold / 179: 1). (это, конечно, на рутированном телефоне)

Я могу открыть устройство как FileInputStream и прочитать данные с него. Однако я не могу прочитать его за отметкой 2 ГБ (моя карта памяти - 16 ГБ).

Это потому, что Android не поддерживает файлы размером более 2 ГБ? Если это так, то почему такие функции, как position() и skip() принимают long аргументы ??

У кого-нибудь есть советы по чтению с устройства после 2ГБ?

1 Ответ

1 голос
/ 06 апреля 2012

попробуйте создать с нативной (jni) lib и вызвать __llseek ()

int __llseek(unsigned int fd, unsigned long offset_high,
             unsigned long offset_low, loff_t *result,
             unsigned int whence);

Я думаю, вы должны добавить прототип в свой код, потому что я сомневаюсь, что есть прямое включение (sys / linux-unistd).h)

конечно, этот подход немного недокументирован :), но вы можете использовать Java после Android 3 и этот трюк до

man _llseek для получения дополнительной информации

...