मैं फ़ाइल सिस्टम से फ़ाइल (मेरे मामले में पीडीएफ) लेने के लिए तीसरे पक्ष के फ़ाइल प्रबंधक का उपयोग कर रहा हूं।
इस तरह से मैंने गतिविधि शुरू की:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(getString(R.string.app_pdf_mime_type));
intent.addCategory(Intent.CATEGORY_OPENABLE);
String chooserName = getString(R.string.Browse);
Intent chooser = Intent.createChooser(intent, chooserName);
startActivityForResult(chooser, ActivityRequests.BROWSE);
यह मेरे पास है onActivityResult:
Uri uri = data.getData();
if (uri != null) {
if (uri.toString().startsWith("file:")) {
fileName = uri.getPath();
} else { // uri.startsWith("content:")
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
fileName = c.getString(id);
}
}
}
}
कोड स्निपेट ओपन इंटेंट्स फ़ाइल मैनेजर के निर्देशों से उधार लिया गया है:
http://www.openintents.org/en/node/829
इसका उद्देश्य if-elseपश्चगामी अनुकूलता है। मुझे आश्चर्य है कि अगर फ़ाइल नाम प्राप्त करने का यह सबसे अच्छा तरीका है जैसा कि मैंने पाया है कि अन्य फ़ाइल प्रबंधक सभी प्रकार की चीजें वापस करते हैं।
उदाहरण के लिए, दस्तावेज़ ToGo निम्नलिखित की तरह कुछ लौटाता है:
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
जिस पर getContentResolver().query()लौटता है null।
चीजों को अधिक रोचक बनाने के लिए, अनाम फ़ाइल प्रबंधक (मुझे क्लाइंट लॉग से यह यूआरआई मिला) कुछ इस तरह लौटा:
/./sdcard/downloads/.bin
क्या URI से फ़ाइल नाम निकालने का एक पसंदीदा तरीका है या किसी को स्ट्रिंग पार्सिंग का सहारा लेना चाहिए?