2012-03-06 20 views
8

से अधिक एसडी कार्ड के एंड्रॉइड निम्न-स्तरीय पढ़ने के लिए मेरा एंड्रॉइड एप्लिकेशन वास्तविक डिवाइस (मेरे मामले में,/dev/block/vold/179: 1) तक पहुंचकर एसडी कार्ड के भौतिक क्षेत्रों को पढ़ने का प्रयास करता है। (यह निश्चित रूप से एक रूट फोन पर है)2 जीबी

मैं डिवाइस को FileInputStream के रूप में खोलने में सक्षम हूं, और इससे डेटा पढ़ता हूं। हालांकि, मैं इसे 2 जीबी अंक से पहले नहीं पढ़ सकता (मेरा मेमोरी कार्ड 16 जीबी है)।

ऐसा इसलिए है क्योंकि एंड्रॉइड 2 जीबी से अधिक फ़ाइलों का समर्थन नहीं करता है? यदि ऐसा है, तो position() और skip() जैसे फ़ंक्शन long तर्क क्यों स्वीकार करते हैं ??

क्या किसी को सलाह है कि पिछले 2 जीबी डिवाइस से कैसे पढ़ा जाए?

+0

ऐसा लगता है कि यह व्यवहार केवल 3.0 से पहले एंड्रॉइड में होता है। मैंने टैबलेट (3.1) पर अपना एप्लिकेशन चलाने की कोशिश की, और यह वास्तव में 2 जीबी से परे एसडी कार्ड (साथ ही साथ आंतरिक मेमोरी) पढ़ सकता है ... –

+3

यह सही है, 2 जीबी पर हनीकॉम सीमा से पहले कुछ भी है क्योंकि I/o संचालन का उपयोग lseek64 के बजाय lseek। आप http://code.google.com/p/android/issues/detail?id=21696 पर समस्या देख सकते हैं। – Matt

उत्तर

1

)

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

एक देशी (JNI) lib साथ बना सकते हैं और __llseek फोन (मैं आप अपने कोड में प्रोटोटाइप जोड़ना चाहिए क्योंकि मुझे शक है एक सीधा शामिल (sys/लिनक्स unistd लगता है की कोशिश ज)

निश्चित रूप से

इस दृष्टिकोण थोड़ा undocumented :) लेकिन आप एंड्रॉयड 3 के बाद जावा का उपयोग कर सकते हैं और अतिरिक्त infos के लिए पहले

man _llseek इस चाल है

+0

मैं इन उद्देश्यों के लिए जेएनआई से बचने की अपेक्षा कर रहा था, लेकिन मुझे लगता है कि मुझे बुलेट काटने की ज़रूरत है, क्योंकि यह वास्तव में काम करता है। धन्यवाद! –

संबंधित मुद्दे