दिलचस्प पोस्ट
पायथन में एक फ़ाइल को कैसे ले जाए एंड्रॉइड: एनीमेशन का विस्तार / संक्षिप्त करें PHP के साथ JSON POST प्राप्त करें क्या विंडोज में एक सेवा के रूप में पायथन स्क्रिप्ट को चलाने के लिए संभव है? यदि संभव हो, तो कैसे? jQuery के फ़ंक्शन नए जोड़े गए डोम तत्वों के लिए बाध्य नहीं है कैसे ngClick प्रोग्राम को ट्रिगर करने के लिए EditText के साथ ListView में खोजें विस्तारित फाइल गुणों को कैसे सेट करें? आईओएस 7 टेक्स्टकिट – छवि के साथ इनलाइन को कैसे सम्मिलित करें? सी # नियतात्मक में स्थैतिक कक्षा आरंभीकरण का क्रम क्या है? Greasemonkey से पेज और इसके विपरीत में चर तक पहुंच window.onload बनाम <body onload = "" /> स्थिर बिंदु गणित सी # में? सी में एक समारोह के अंदर स्थिर चर अंदर स्कैनर डबल वैल्यू – इनपुट मेस्मेस्ट अपेशन

नई फ़ाइलों के लिए एंड्रॉइड एसडी कार्ड स्कैन करें

मेरा ऐप उपयोगकर्ता को अपने एसडी कार्ड पर छवि सहेजने की अनुमति देता है। लेकिन मुझे यकीन नहीं है कि जब तक आप एसडी कार्ड को अनमाउंट और रीमाउंट नहीं कर देते, गैलरी में इसे कैसे दिखाना है? मैं इस समस्या के साथ कुछ दिनों के लिए googled है, लेकिन मुझे यकीन है कि कैसे इसे स्वचालित रूप से प्रकट करने के लिए नहीं मुझे यह लिंक मिला लेकिन मुझे यकीन नहीं है कि कक्षा का उपयोग कैसे करें फाइल को सहेजने के लिए मैं इसका इस्तेमाल करता हूं। कोशिश कैच ब्लॉक के नीचे जहां मैं नए मीडिया के लिए एसडी कार्ड स्कैन करना चाहता हूं।

FileOutputStream outStream = null; File file = new File(dirPath, fileName); try { outStream = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream); outStream.flush(); outStream.close(); } catch { ... } 

अगर कोई मुझे सही दिशा में बता सकता है, तो मैं सराहना करता हूं।

वेब के समाधान से एकत्रित समाधान "नई फ़ाइलों के लिए एंड्रॉइड एसडी कार्ड स्कैन करें"

मैंने मीडियासकैनर को ट्रिगर करने के लिए कई अलग-अलग तरीकों की कोशिश की है, और ये मेरे परिणाम हैं

SendBroadcast

सबसे सरल और सरल समाधान यह आपके कोड से निम्नलिखित अनुदेश निष्पादित करने में शामिल है:

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

हालांकि, यह आवश्यक अनुमतियों की कमी के कारण, अब किटकैट डिवाइस पर काम नहीं करता है।


MediaScannerWrapper

जैसा कि यहां पोस्ट किया गया है (प्रति @ ब्रायन का जवाब), इसमें एक विशिष्ट निर्देशिका पर scan() पद्धति को ट्रिगर करने के लिए एक MediaScannerConnection उदाहरण को लपेटा जाता है। इस विधि ने 4.3 और नीचे के लिए ठीक काम किया है, लेकिन किटकैट (4.4+) के साथ अभी भी कोई भाग्य नहीं है।


FileWalker

मीडियास्टोर के अपने डाटाबेस को अपडेट करने की प्रतिबद्धता की कमी को दूर करने की कोशिश करने वाले कई प्ले स्टोर ऐप में से एक है रेस्कोन एसडी यह कई विभिन्न प्रसारणों को भेजता है:

  sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file://" + Environment.getExternalStorageDirectory()))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable/SD"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable/MicroSD"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///mnt/Removable/MicroSD"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///mnt"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///storage"))); sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable"))); 

और बेस निर्देशिका के प्रत्येक फ़ाइल पर मैन्युअल रूप से scan() विधि को ट्रिगर करके किटकैट का समर्थन करने का प्रयास करता है। दुर्भाग्य से, यह दोनों बहुत सीपीयू-गहन और समय-उपभोक्ता है, इसलिए यह बहुत ही अनुशंसित नहीं है।


"खोल तरीके"

कुछ मामलों में किटकैट के साथ काम करने वाली एकमात्र बात adb shell माध्यम से प्रसारण भेज रही है। इसलिए, यह स्निपेट आपको बस प्रोग्रामेटिक रूप से करने की अनुमति देता है:

 Runtime.getRuntime().exec("am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://" + Environment.getExternalStorageDirectory()); 

यह करने का एक हैक-इश तरीका अधिक है, लेकिन फिलहाल यह सबसे अच्छा है कि मैं इसके साथ आ सकता हूं।


जमीनी स्तर

ऊपर दिए गए समाधानों में से प्रत्येक वास्तव में उन सभी चीज़ों के लिए काम करता है जोकि किटकैट नहीं है। इसका कारण, जस्टिन के लिए धन्यवाद, एक बग मिला है और आधिकारिक ट्रैकर को जारी किया गया है। इसका मतलब यह है कि जब तक बग को इशारा नहीं किया जाता है, तब तक हम कोई भी किटकैट समर्थन नहीं छोड़ते हैं।

कौन सा उपयोग करने के लिए? इनमें से, मैं MediaScannerWrapper समाधान का उपयोग करेगा, shell-ish दृष्टिकोण (पिछले एक) के साथ।

चूंकि मैंने पिछले पोस्ट को जाहिरा तौर पर पोस्ट किया था, एक उचित विधि नहीं थी, मुझे एक अन्य विधि मिली है । आप मूल रूप से एक आवरण वर्ग बनाते हैं, इसे इनिशियलाइज़ करें, और फिर स्कैन () विधि को कॉल करें। बहुत उपयोगी पोस्ट मुझे पता है कि यह भी उचित नहीं है।

MediaScannerConnection का उपयोग करें:

http://developer.android.com/reference/android/media/MediaScannerConnection.html

एसिंक्रोनस कॉल के कई स्तरों के कारण यह थोड़ा दर्द हो सकता है, इसलिए एपीआई 8 (फ़्रोयो) के रूप में एक सहायक कार्य है:

http://developer.android.com/reference/android/media/MediaScannerConnection.html#scanFile (एंड्रॉइड.content.Context, java.lang.String [], java.lang.String [], android.media.MediaScannerConnection। OnScanCompletedListener)

आप प्रसारण भेजकर स्पष्ट रूप से मीडिया स्कैनर को कॉल भी कर सकते हैं।

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri .parse("file://" + Environment.getExternalStorageDirectory()))); 

आप गैलरी में एक आइटम डालने के लिए MediaStore.Images.Media.insertImage का उपयोग कर सकते हैं।

यहां स्कैन करने के लिए एक अन्य तरीका है:

 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,"uri to file")); 

और फिर सिस्टम ACTION_MEDIA_SCANNER_FINISHED ब्रॉडकास्ट पर आग लगाएगा ताकि आप ब्रॉडकास्ट रिसेवर के साथ इस पर प्रतिक्रिया दें।

ACTION_MEDIA_SCANNER_FINISHED प्रसारण प्राप्त करने के लिए, आशय फ़िल्टर में डेटा स्कीम होना चाहिए:

 IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); context.registerReceiver(mMediaScannerFinishReceiver, intentFilter); 

डॉक्टर से:

सार्वजनिक स्थिर अंतिम स्ट्रिंग ACTION_MEDIA_SCANNER_SCAN_FILE

एपीआई स्तर 1 ब्रॉडकास्ट एक्शन में जोड़ा गया: एक फाइल को स्कैन करने के लिए मीडिया स्कैनर का अनुरोध करें और इसे मीडिया डाटाबेस में जोड़ें। फ़ाइल का पथ Intent.mData फ़ील्ड में निहित है।

तथा

सार्वजनिक स्थिर अंतिम स्ट्रिंग ACTION_MEDIA_SCANNER_FINISHED

एपीआई स्तर 1 ब्रॉडकास्ट एक्शन में जोड़ा गया: मीडिया स्कैनर ने एक निर्देशिका को स्कैन करना समाप्त कर दिया है। स्कैन की गई निर्देशिका का पथ Intent.mData फ़ील्ड में निहित है।