Android में एक इरादे के माध्यम से किसी भी तरह की फ़ाइल चुनें


95

मैं उन एप्स के लिए एक इंट्रोचोसर शुरू करना चाहता हूं, जो किसी भी तरह की फाइल लौटा सके

वर्तमान में मैं उपयोग करता हूं (जो मैंने फ़ाइल अनुलग्नक के लिए एंड्रॉइड ईमेल स्रोत कोड से कॉपी किया है)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

लेकिन यह केवल मेरे गैलेक्सी एस 2 पर "गैलरी" और "म्यूजिक प्लेयर" दिखाता है। इस उपकरण पर एक फ़ाइल एक्सप्लोरर है और मैं चाहूंगा कि यह सूची में दिखाई दे। मैं सूची में दिखाने के लिए कैमरा ऐप भी चाहूंगा, ताकि उपयोगकर्ता एक तस्वीर शूट कर सके और अपने ऐप के माध्यम से भेज सके। अगर मैं एस्ट्रो फाइल मैनेजर स्थापित करता हूं तो यह उस इरादे का जवाब देगा। मेरे ग्राहक केवल गैलेक्सी SII के मालिक हैं और मैं उन्हें एस्ट्रो फ़ाइल प्रबंधक को स्थापित करने के लिए मजबूर नहीं करना चाहता, क्योंकि उन्हें पहले से ही एक बुनियादी लेकिन पर्याप्त फ़ाइल प्रबंधक है।

किसी भी विचार मैं इसे कैसे प्राप्त कर सकता हूं? मुझे पूरा यकीन है कि मैंने पहले से ही डिफ़ॉल्ट फ़ाइल प्रबंधक को एक फ़ाइल लेने के लिए इस तरह के मेनू में दिखाई दिया था, लेकिन मुझे याद नहीं है कि किस ऐप में।


चित्र चुनने के लिए आपको फ़ाइल चुनने के लिए बहुत अलग कोड की आवश्यकता होगी। मुझे नहीं लगता कि अधिकांश फ़ाइल खोजकर्ता एक फ़ाइल वापस कर सकते हैं , लेकिन मैं गलत हो सकता हूं।
18

क्या आप बता सकते हैं कि आपको किस तरह की फाइलों को प्राथमिक रूप से एक्सेस करने की आवश्यकता है?
सबरसन 90

1
@dtech: मुझे फ़ाइल एक्सप्लोरर को फ़ाइल वापस करने की उम्मीद नहीं है, मुझे केवल इसकी आवश्यकता है।
ErGo_404

@ subrussn90: मुझे उपयोगकर्ता को किसी भी तरह की फाइल लेने की जरूरत है। यह pdfs, .doc, .zip, किसी भी तरह की फ़ाइल हो सकती है।
ErGo_404

क्या यह पर्याप्त है कि आप एसडी कार्ड पर निर्दिष्ट फ़ाइल का उरई प्राप्त करें ???
सबरसन 90

जवाबों:


88

कैमरे के लिए नहीं बल्कि अन्य फाइलों के लिए ..

मेरे डिवाइस में मैंने ES File Explorerइंस्टॉल किया है और यह बस मेरे मामले में काम करता है ..

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);

5
यह बाहरी फ़ाइल एक्सप्लोरर (जैसे ES फ़ाइल एक्सप्लोरर या एस्ट्रो फ़ाइल प्रबंधक, लेकिन सैमसंग फ़ाइल एक्सप्लोरर के साथ नहीं) के साथ काम करता है। यह अजीब लगता है कि उन्होंने उस कार्रवाई का जवाब देने के लिए सही इरादे वाले फ़िल्टर को लागू नहीं किया।
ErGo_404

@Lukap - ओपन सोर्स एंड्रॉइड फ़ाइल मैनेजर का उपयोग करें और इसे अपने आवेदन के साथ एकीकृत करें फिर आपको किसी भी तीसरे पक्ष के आवेदन की आवश्यकता नहीं है।
user370305

2
मैं चयनित फ़ाइल कैसे प्राप्त कर सकता हूं? मुझे लगता है कि यह मार्ग है, लेकिन कैसे?
फ्रांसिस्को कॉर्लेस मोरालेस

1
@FranciscoCorralesMorales - में onActivityResult()आप Uriफ़ाइल प्राप्त कर सकते हैं ।
user370305

1
PICKFILE_RESULT_CODEहोना चाहिए PICKFILE_REQUEST_CODE
एरन लोरिंज़

50

सैमसंग फ़ाइल एक्सप्लोरर को न केवल कस्टम एक्शन ( com.sec.android.app.myfiles.PICK_DATA ) की आवश्यकता है, लेकिन यह भी श्रेणी भाग (इरादे। CATEGORY_DEFAULT ) और माइम-प्रकार को अतिरिक्त के रूप में पारित किया जाना चाहिए।

Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

आप एकाधिक फ़ाइलों को खोलने के लिए भी इस क्रिया का उपयोग कर सकते हैं: com.sec.android.app.myfiles.PICK_DATA_MULTIPLE वैसे भी यहाँ मेरा समाधान है जो सैमसंग और अन्य उपकरणों पर काम करता है:

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        // special intent for Samsung file manager
        Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
         // if you want any file type, you can skip next line 
        sIntent.putExtra("CONTENT_TYPE", mimeType); 
        sIntent.addCategory(Intent.CATEGORY_DEFAULT);

        Intent chooserIntent;
        if (getPackageManager().resolveActivity(sIntent, 0) != null){
            // it is device with Samsung file manager
            chooserIntent = Intent.createChooser(sIntent, "Open file");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
        } else {
            chooserIntent = Intent.createChooser(intent, "Open file");
        }

        try {
            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
        }
    }

यह समाधान मेरे लिए अच्छी तरह से काम करता है, और शायद किसी और के लिए उपयोगी होगा।


यह मेरे लिए लगभग काम करता है, इस तथ्य को छोड़कर कि जब लॉन्च किया जाता है, तो वह किसी भी प्रकार की कोई फ़ाइल स्वीकार नहीं करता है। मैं फ़ोल्डर के माध्यम से ब्राउज़ कर सकता हूं, लेकिन यह है।
राडू

समस्या यह है कि इरादे को माइम टाइप करने की आवश्यकता है: "फ़ाइल / *", जबकि सैमसंग की जरूरत है "* / *" - * / * के बीच रिक्त स्थान के बिना
Radu

1
एंड्रॉइड डिवाइस के अन्य 11k के बारे में क्या।
ओलिवर डिक्सन

1
इस इरादे के लिए URI कैसे सेट करें आप कृपया मेरी मदद कर सकते हैं?
प्रियंकाचौहान

1
सैमसंग इंटेंट ("com.sec.android.app.myfiles.PICK_DATA") के मामले में, आप स्ट्रिंग अतिरिक्त "FOLDERPATH" या "START_FOLDER" डालने का प्रयास कर सकते हैं
Chupid

41

गैलेक्सी पर मेरे लिए यह काम उसके शो कॉन्टैक्ट्स, डिवाइस, गैलरी, म्यूजिक प्लेयर पर इंस्टॉल किए गए फ़ाइल मैनेजर को नोट करता है

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

यहां onActivityResultगतिविधि का मार्ग मिलता है ।

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}

6
यूरी को उपयोग में कैसे बदलें।
आनंद सवजनी

Java.io.File पाने के बारे में निश्चित नहीं है, लेकिन इसके साथ खोला जा सकता है: developer.android.com/reference/android/content/… यहाँ पर सरल नाम कैसे प्राप्त करें: stackoverflow.com/a/23270545/755313
demasisee

3
फ़ोल्डर कैसे चुनें?
सींगेट 2319

6

यह मुझे सबसे अच्छा परिणाम देता है:

    Intent intent;
    if (android.os.Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
        intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
        intent.putExtra("CONTENT_TYPE", "*/*");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
    } else {

        String[] mimeTypes =
                {"application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
                        "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
                        "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
                        "text/plain",
                        "application/pdf",
                        "application/zip", "application/vnd.android.package-archive"};

        intent = new Intent(Intent.ACTION_GET_CONTENT); // or ACTION_OPEN_DOCUMENT
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    }

क्या आप अपने onActivityResultCode @Islam Khaled
Kishan Donga

1
एक तीसरे विकल्प के लिए org.openintents.action.PICK_FILE भी देखें। openintents.org/action/org-openintents-action-pick-file आपका कोड यह भी मानता है कि सैमसंग फोन पर हर कोई उपयोग करता है और (अभी भी) में सैमसंग फ़ाइल प्रबंधक है। एक वापसी के रूप में सैमसंग के साथ इरादे का उपयोग करना। अधिक मजबूत होगा।
मार्कस वोल्सचॉन

1

सैमसंग फ़ाइल एक्सप्लोरर एक कस्टम कार्रवाई का उपयोग करता है। यही कारण है कि मैं सैमसंग फ़ाइल एक्सप्लोरर को तब देख सकता था जब सैमसंग ऐप्स से फ़ाइल ढूंढ रहा था, लेकिन मेरा नहीं।

कार्रवाई "com.sec.android.app.myfiles.PICK_DATA" है

मैंने एक कस्टम एक्टिविटी पिकर बनाया जो दोनों इंटेंट्स को फ़िल्टर करने वाली गतिविधियाँ प्रदर्शित करता है।


नमस्ते, क्या आप इसे थोड़ा और समझा सकते हैं? सैमसंग गैलेक्सी फोन के लिए मैं इंटेंट सेलेक्टाइल = नई इंटेंट ("com.sec.android.app.myfiles.PICK_DATA") का उपयोग करता हूं; लेकिन यह एक त्रुटि का कारण बनता है
steliosf

मुझे अभी यकीन नहीं है, लेकिन मैं बाद में इसकी जांच कर सकता हूं। मुझे लगता है कि यह गतिविधि नहीं है अपवाद नहीं मिला। क्या आपके पास कोई काम करने का उपाय है? मैं लगभग सब कुछ करने की कोशिश की और इसे ठीक करने का प्रबंधन नहीं किया
स्टेलियोसेफ

इस इरादे ने मेरे लिए गैलेक्सी एसआईआई पर काम किया है। इसे GT-B5510 (गैलेक्सी Y प्रो) पर आज़माया और यह काम नहीं किया। मुझे लगता है कि यह सिर्फ विश्वसनीय नहीं है यदि आप सभी सैमसंग उपकरणों को लक्षित करना चाहते हैं। मैंने अपने एप्लिकेशन में एक ओपन सोर्स फ़ाइल मैनेजर को एकीकृत किया, लेकिन यह इस तरह की बुनियादी ज़रूरत के लिए एक भारी समाधान है।
ErGo_404

इस इरादे के लिए URI कैसे सेट करें आप कृपया मेरी मदद कर सकते हैं?
प्रियंकाचौहान

0

यदि आप यह जानना चाहते हैं, तो यह एक खुला स्रोत पुस्तकालय है, जिसे फाइलेडियलॉग कहा जाता है, यह एक छोटा और उपयोग करने में आसान है जो एक फ़ाइल पिकर प्रदान करता है।

एंड्रॉइड के लिए एक अन्य फ़ाइल चयनकर्ता की लाइब्रेरी के साथ अंतर यह है कि aFileDialog आपको फ़ाइल चयनकर्ता को डायलॉग के रूप में और गतिविधि के रूप में खोलने का विकल्प देता है।

यह आपको फ़ोल्डरों का चयन करने, फाइलें बनाने, नियमित अभिव्यक्ति का उपयोग करके फाइलों को फिल्टर करने और पुष्टि संवाद दिखाने की सुविधा भी देता है।


0

अन्य उत्तर गलत नहीं हैं। हालाँकि, अब फ़ाइलें खोलने के लिए अधिक विकल्प हैं। उदाहरण के लिए, यदि आप चाहते हैं कि ऐप में लंबे समय तक, फ़ाइल के लिए स्थायी एकस, तो आप ACTION_OPEN_DOCUMENTइसके बजाय उपयोग कर सकते हैं । आधिकारिक दस्तावेज देखें: स्टोरेज एक्सेस फ्रेमवर्क का उपयोग करके फाइलें खोलेंइस उत्तर को भी देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.