2012-03-06 9 views
8

L'applicazione Android tenta di leggere i settori fisici della scheda SD accedendo al dispositivo effettivo (nel mio caso,/dev/block/vold/179: 1). (questo è su un telefono rooted, ovviamente)Lettura a basso livello Android di scheda SD superiore a 2 GB

Sono in grado di aprire il dispositivo come FileInputStream e leggere i dati da esso. Tuttavia, non riesco a leggere oltre il marchio da 2 GB (la mia scheda di memoria è 16 GB).

È perché Android non supporta file superiori a 2 GB? Se questo è il caso, perché funzioni come position() e skip() accettano argomenti long ??

Qualcuno ha consigli su come leggere dal dispositivo oltre 2 GB?

+0

Sembra che questo comportamento si verifica solo in Android precedenti alla 3.0. Ho provato a eseguire la mia applicazione su un tablet (3.1), e in effetti posso leggere la scheda SD (oltre alla memoria interna) oltre 2 GB ... –

+3

Questo è corretto, qualsiasi cosa prima del favo limiti a 2 GB perché le operazioni di I/O utilizzano lseek invece di lseek64. Puoi controllare il problema all'indirizzo http://code.google.com/p/android/issues/detail?id=21696. – Matt

risposta

1

provare creare con un (JNI) lib nativa e chiamare __llseek()

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

Penso che si dovrebbe aggiungere il prototipo nel codice perché dubito c'è una diretta includono (sys/linux-unistd .h)

naturalmente questo approccio è un po 'documentato :) ma è possibile utilizzare Java dopo Android 3 e questo trucco prima

man _llseek per informazioni aggiuntive

+0

Speravo piuttosto di evitare JNI per questi scopi, ma suppongo che dovrò mordere il proiettile, dal momento che funziona davvero. Grazie! –

Problemi correlati