दिलचस्प पोस्ट
जावा के charAt () के बराबर सी #? क्या वाकई गुंजाइश है? एक WPF MVVM अनुप्रयोग में कुंजीपटल घटनाएं? मैं किस तरह की प्रणाली का एक मार्ग प्रतिबंध बना सकता हूं System.Guid? फ़ायरफ़ॉक्स, सफारी और क्रोम के साथ क्लिपबोर्ड पर टेक्स्ट कॉपी / रखें ऐरप्लान_एमओडीडीओओएन को "ट्रू" या चालू करने के लिए कैसे सेट करें? हास्केल में मोनॉड के रूप में साइड इफेक्ट्स मॉडल क्यों हैं? जावास्क्रिप्ट में कंप्यूट किए गए फ़ॉन्ट-परिवार प्राप्त करें घातक त्रुटि को कैसे पकड़ें: अधिकतम 30 सेकंड का निष्पादन समय PHP में पार हो गया सी # में .eml फ़ाइलों को पार्स करने की अनुशंसाएं बुनना और पैंडोक के साथ पीडीएफ में कनवर्ट करते समय मार्कडाउन में चित्रा की स्थिति PyAudio काम कर रहा है, लेकिन हर बार त्रुटि संदेश बाहर spits CLASSPATH परिवेश चर का उपयोग करने के बावजूद java.lang.ClassNotFoundException CSS3 की सीमा-त्रिज्या संपत्ति और सीमा-पतन: पतन मिश्रण नहीं है। गोल कोनों के साथ एक संक्षिप्त तालिका बनाने के लिए मैं सीमा-त्रिज्या का उपयोग कैसे करूं? पीडीएफ फाइल मर्ज करें

विशिष्ट पथ (फ़ोल्डर) पर ट्रिगर मेडीस्कैनर, कैसे करें?

मुझे यह वर्ग मिला है:

import android.content.Context; import android.media.MediaScannerConnection; import android.net.Uri; import android.util.Log; public class MediaScannerWrapper implements MediaScannerConnection.MediaScannerConnectionClient { private MediaScannerConnection mConnection; private String mPath; private String mMimeType; // filePath - where to scan; // mime type of media to scan ie "image/jpeg". // use "*/*" for any media public MediaScannerWrapper(Context ctx, String filePath, String mime){ mPath = "/sdcard/DCIM/Camera"; mMimeType = "jpg"; mConnection = new MediaScannerConnection(ctx, this); } // do the scanning public void scan() { mConnection.connect(); } // start the scan when scanner is ready public void onMediaScannerConnected() { mConnection.scanFile(mPath, mMimeType); Log.w("MediaScannerWrapper", "media file scanned: " + mPath); } public void onScanCompleted(String path, Uri uri) { // when scan is completes, update media file tags } } 

दूसरे वर्ग में इसका उपयोग कैसे करें? मुझे नहीं पता कि कक्षाओं को कैसे ठीक से इस्तेमाल किया जाए, मैंने कोशिश की लेकिन कुछ भी काम नहीं कर रहा है। मैं कुछ गलत करता हूं, लेकिन मुझे नहीं पता कि कोई इस के साथ मेरी मदद कर सकता है।

Solutions Collecting From Web of "विशिष्ट पथ (फ़ोल्डर) पर ट्रिगर मेडीस्कैनर, कैसे करें?"

कहानी

एंड्रॉइड 4.4 से पहले, हम मीडिया स्कैनर को किसी विशेष फाइल, या फ़ोल्डर या भंडारण की जड़ पर भी ट्रिगर करने के लिए प्रसारण भेज सकते थे। लेकिन 4.4 किटकैट से, यह एंड्रॉइड डेवलपर्स द्वारा तय किया गया है।

मैं तय क्यों करूँ? वजह साफ है। रूट डायरेक्टरी पर MEDIA_MOUNTED का उपयोग करते हुए प्रसारण भेजना बहुत महंगा है। मीडिया स्कैनर चलाना एक महंगी ऑपरेशन है और स्थिति तब भी बदतर हो जाती है जब उपयोगकर्ता को संग्रहण और गहरी फ़ोल्डर संरचनाओं में बहुत सी फ़ाइलें मिलेंगी।

एंड्रॉइड 4.4 से पहले

इसे सीधे और सरल रखें यदि आप एंड्रॉइड 4.4 से पहले अपने ऐप को लक्षित कर रहे हैं। लेकिन ध्यान रखें कि इसे रूट निर्देशिका पर उपयोग न करें, जब तक कि आवश्यक न हो।

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

एंड्रॉइड 4.4 से

आपके लिए दो तरीके हैं

i) सबसे पहले एक पिछले उदाहरण के समान है, लेकिन कुशलतापूर्वक काम नहीं कर सकता है और उसे भी अनुशंसित नहीं किया जाता है।

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

ii) अब, हम इस समस्या का सबसे अधिक अनुशंसित और कुशल समाधान पर चलते हैं।

फ़ाइलों का फ़ाइल पथ जो अद्यतन किया गया है, इस तरह से, एक स्ट्रिंग प्रकार ArrayList में जोड़ें

 ArrayList<String> toBeScanned = new ArrayList<String>(); toBeScanned.add(item.getFilePath()); 

अब आपको MediaScannerConnection वर्ग के scanFile () स्थैतिक विधि को चलाने और स्ट्रिंग सरणी को सभी फाइलों की सूची युक्त करने की आवश्यकता है जिन्हें अद्यतन किया गया है और मीडिया स्कैन की आवश्यकता है।

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

 String[] toBeScannedStr = new String[toBeScanned.size()]; toBeScannedStr = toBeScanned.toArray(toBeScannedStr); MediaScannerConnection.scanFile(getActivity(), toBeScannedStr, null, new OnScanCompletedListener() { @Override public void onScanCompleted(String path, Uri uri) { System.out.println("SCAN COMPLETED: " + path); } }); 

हे मुझे पता चला कि यह एक बहुत सरल कोड के साथ कैसे करें

बस कोड की इस पंक्ति को कॉल करें:

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

यह मेडीस्कैनर को ट्रिगर करना चाहिए।

एंड्रॉइड में, एक ऐसी सामग्री डेटाबेस है जो मीडिया स्कैनर द्वारा उपयोग की जाती है ताकि डिवाइस पर मौजूद सभी मीडिया कन्टैंट को ट्रैक किया जा सके।

जब एंड्रॉइड बूट हो जाता है, तो मेडियास्कैनर सर्विस लॉन्च की जाती है और पूरी बाहरी मेमोरी के माध्यम से चलाती है, यह जानने के लिए कि क्या कोई नई मीडिया सामग्री है,

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

मीडिया स्कैनर चलाने के बजाय, आप अपने आप को सामग्री डेटाबेस अपडेट कर सकते हैं और इसे समस्या का समाधान कर सकते हैं।

यहां सामग्री रिज़ॉल्वर का उपयोग करके डालने, हटाने, अपडेट करने के तरीके पर एक स्पष्टीकरण दिया गया है। ("डेटा डालने, अपडेट करने और हटाने" अनुभाग के लिए खोजें)

संपादित करें: इस उत्तर में एक नमूना कोड है जवाब के लिए Janusz द्वारा की जाँच करें

  File file = new File(absolutePath); Uri uri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri); sendBroadcast(intent); 
 private void galleryAddPic() { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); } 

संदर्भ: http://developer.android.com/training/camera/photobasics.html#TaskGallery

Add the Photo to a Gallery अनुभाग Add the Photo to a Gallery

@ एट्ररा रॉय के जवाब के रूप में, मैं इस मुद्दे के बारे में एक प्रयोग करने का निर्णय लेता हूं। मैं यहाँ क्या मिला:

  • Intent.ACTION_MEDIA_MOUNTED और Intent.ACTION_MEDIA_SCANNER_SCAN_FILE व्यक्तिगत फ़ाइल पथ को स्वीकार कर सकते हैं, इसलिए भेजें Broadcast (नया आशय (Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse (filePath))); या प्रेषण भेजें (नया इरादा (Intent.ACTION_MEDIA_MOUNTED, Uri.parse (filePath))); वैध होगा
  • यदि आप इटेंट के साथ व्यक्तिगत फ़ाइल पथ का उपयोग करते हैं। एक्शन_एमएडीए_माउन्ट किटकैट या उससे ऊपर, आपका एप्लिकेशन अभी भी क्रैश होगा
  • अगर आप इंटकेंट का उपयोग करते हैं। एक्शन_एमएडीए_एससीएएनएसएएनएसएएनएसएएनएसईएनईईईईईईईटी या मिडियास्केनरकॉन्केक्शन, जो किटकैट की तुलना में कम है, तो आपका एप्लीकेशन बंद नहीं होगा, लेकिन यह विधि सिर्फ आप के रूप में काम नहीं करेगा।

उस प्रयोग से, मुझे लगता है कि सबसे अच्छी पद्धति को संभालना है

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { MediaScannerConnection.scanFile(context, new String[]{imagePath}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { //something that you want to do } }); } else { context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + imagePath))); } 

मुझे पता है कि मुझे कुछ याद आ गया है