Nexus 4 MTP के माध्यम से फाइल नहीं दिखा रहा है


80

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

कोड:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType();
    Serializer serializer = new Persister();
    File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml");

    try {
        boolean created = myFile.createNewFile();
        serializer.write(customerQueryRequest, myFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

मैं एस्ट्रो फाइल मैनेजर के साथ फोन पर ही फाइल देख सकता हूं:

स्क्रीनशॉट

लेकिन विंडोज इसे नहीं देखता ...:

स्क्रीनशॉट

adb shell निर्देशिका शो पर:

ls -l
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Alarms
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Android
drwxrwxr-x root     sdcard_rw          2012-11-21 19:30 DCIM
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Download
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Movies
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Music
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Notifications
drwxrwxr-x root     sdcard_rw          2012-11-19 12:06 Pictures
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Podcasts
drwxrwxr-x root     sdcard_rw          2012-11-19 13:22 Ringtones
drwxrwxr-x root     sdcard_rw          2012-11-19 14:33 bluetooth
-rw-rw-r-- root     sdcard_rw       79 2012-12-05 22:26 customerQueryRequest.xml
drwxrwxr-x root     sdcard_rw          2012-11-20 02:50 data
-rw-rw-r-- root     sdcard_rw    11394 2012-11-19 13:54 eightpen_custom_gestures
drwxrwxr-x root     sdcard_rw          2012-11-19 13:17 media

मेरे Nexus 4 के साथ क्या हो रहा है? यह विंडोज से मेरी चीजों को क्यों छिपा रहा है?


1
मुझे लगा कि मैं कुछ गलत कर रहा हूं। अब मुझे पता है कि मैं अकेला नहीं हूं।
neverMind9

जवाबों:


72

MTP पर Android USB फ़ाइल पहुँच को प्रभावित करने वाला ज्ञात समस्या है । फोन को रीबूट करने तक एमटीपी कैश पुराना हो जाता है।

एक समाधान है:

  • "मीडिया स्टोरेज" ऐप का डेटा साफ़ करें
  • एक अद्यतन को लागू करने के लिए SDrescan या SD स्कैनर (Android 4.4 / 5 पर काम करता है, F-Droid पर उपलब्ध है ) ऐप का उपयोग करें

या सिर्फ USB का उपयोग करने से बचें। समस्या फ़ाइलों तक पहुँचने के अन्य तरीकों को प्रभावित नहीं करती है। उदाहरण के लिए, AirDroid को फ़ाइलों को स्थानांतरित करने का प्रयास करें।


नोट: यह एंड्रॉइड 5.0.2 के लिए काम नहीं करता है: "मीडिया स्टोरेज" को क्लीयर करने और एसडी रेस्कनर का उपयोग करने के बाद, फ़ोल्डर्स विंडोज 7 में अनपेक्षित 4K फ़ाइलों के रूप में दिखाई देते हैं। उस बिंदु पर एकमात्र समाधान एक बार फिर मीडिया स्टोरेज को साफ़ करना और डिवाइस को पुनरारंभ करना है


2
SDrescan स्थापित करें, इसे चलाएं: फिक्स्ड! बहुत बहुत धन्यवाद
PiTheNumber

यह पहले नहीं हो रहा था लेकिन आज हुआ। BTW i रिबूट को IDK काम करना चाहिए क्यों यह काम नहीं कर रहा है।
मुहम्मद बाबर

3 बार फोन को रिबूट करने के बाद यह अजीब था, यह दिखाई दिया।
मुहम्मद बाबर

यह एंड्रॉइड 5.0.2 के लिए काम नहीं करता है: "मीडिया स्टोरेज" को क्लीयर करने और एसडी रेस्कनर का उपयोग करने के बाद, फ़ोल्डर्स विंडोज 7 में अनपेक्षित 4K फ़ाइलों के रूप में दिखाई देते हैं। उस बिंदु पर एकमात्र समाधान एक बार फिर मीडिया स्टोरेज को साफ़ करना और डिवाइस को पुनरारंभ करना है।
एंटोनियो

यह भी Nexus 7 Android 4.4.2 पर काम नहीं किया। मेरा मैक रिपोर्ट कर रहा है कि मेरी कस्टम निर्देशिका 4k फ़ाइल है।
जो लेप

44

आप फ़ाइल कोड के बाद निम्न कोड का उपयोग कर सकते हैं

MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null);

स्रोत: https://code.google.com/p/android/issues/detail?id=38282


11
उत्तम। इस सवाल का हल होना चाहिए।
जादूगर

यह समाधान मेरे लिए नेक्सस 7, एंड्रॉइड 4.4.2 पर मैक से कनेक्ट होने पर काम नहीं कर रहा है। मैं बाह्य संग्रहण में एक नया फ़ोल्डर बना रहा हूं और उस फ़ोल्डर में फ़ाइलें संग्रहीत कर रहा हूं। अगर मैं इसे केवल फ़ोल्डर में फाइलों पर चलाता हूं, तो मैक कुछ नहीं दिखाता है। अगर मैं इसे अपनी नई निर्देशिका पर चलाता हूं, तो मैक दिखाता है कि मेरी निर्देशिका 4k फ़ाइल है (और निर्देशिका नहीं)। मैंने context.sendBroadcast()बिना किसी प्रभाव के कॉल करने की भी कोशिश की है।
जो लैप

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

आह। यह onDestroy () से नहीं किया जा सकता है। यह काम करता है अगर मैं इसे कहीं और करता हूं। मैं उस समय कर सकता हूं जब मैं फ़ाइल बनाता हूं, लेकिन फिर डेस्कटॉप फ़ाइल ब्राउज़र शून्य काटने का आकार दिखाता है। फिर भी, जब मैं फाइल को कॉपी करता हूं, तो यह पूरी फाइल पर कॉपी हो जाती है।
जो लैप

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

5

इस मुद्दे पर घंटों बिताने के बाद मैंने इस तरह हल किया:

private void rescanFolder(String dest) {
    // Scan files only (not folders);
    File[] files = new File(dest).listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isFile();
        }
    });

    String[] paths = new String[files.length];
    for (int co=0; co< files.length; co++)
        paths[co] = files[co].getAbsolutePath();

    MediaScannerConnection.scanFile(activity, paths, null, null);

    // and now recursively scan subfolders
    files = new File(dest).listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    });

    for (int co=0; co<files.length; co++)
        rescanFolder(files[co].getAbsolutePath());
} 

बात यह है कि आपको फ़ाइलों को केवल स्कैन करना है (फ़ोल्डर्स नहीं) और फिर प्रत्येक फ़बफ़ोल्डर के लिए पुनरावृत्ति दोहराएं

संपादित करें इसके अलावा, यदि आप नहीं चाहते कि आपके फोटो एल्बम में चित्र जोड़े जाएं (लेकिन सिर्फ आपकी सामग्री mtp प्रोटोकॉल पर दिखाई दे), तो .nomediaइसे पुन: आकार देने से पहले अपने फ़ोल्डर में एक खाली फ़ाइल रखना पसंद करें:

new File(myFolder + File.separator + ".nomedia").createNewFile();
rescanFolder(myFolder);

बहुत उपयोगी उत्तर, मैं इसे पुनरावर्ती रूप से उपयोग करने में सक्षम था और अब मैं एमटीपी पर सभी नई बनाई गई फ़ाइलों को देखता हूं। वैसे भी, सेवा की अनिश्चितता से कैसे निपटें? मुझे एक ServiceConnectionLeaked त्रुटि मिलती है: "गतिविधि ने ServiceConnection android.media.MediaScannerConnection@42164d98 को लीक कर दिया है जो मूल रूप से यहां बंधी थी"। MediaScannerConnection.scanFolder () का उपयोग करने के बाद से इसे हल करने के बारे में कोई विचार सांख्यिकीय रूप से बाध्य सेवा को डिस्कनेक्ट करने का कोई मौका नहीं है ...
आंद्रे

4

स्वीकृत उत्तर में जिस बग को मैंने सबसे बेहतर तरीके से पाया है, वह एंड्रॉइड ओएस से एसएसएच का उपयोग करके किसी अन्य मशीन / सर्वर (लिनक्स, मैकओएस, विंडोज़) पर डेटा कॉपी करना है।

  • सुनिश्चित करें कि डिवाइस (एंड्रॉइड) और मशीन (जहां आप डेटा कॉपी करना चाहते हैं) प्रति आईपी या होस्ट नाम के लिए उपलब्ध हैं, उदाहरण के लिए उन्हें एक ही वाईफाई नेटवर्क से कनेक्ट करके।

वैकल्पिक और अनुशंसित

  • USB टेदरिंग का उपयोग करके Android डिवाइस कनेक्ट करें। यह वायर्ड कनेक्शन के कारण तेज गति सुनिश्चित करता है और गारंटी देता है कि दोनों आईपी पते एक दूसरे को दिखाई देते हैं क्योंकि दोनों एक ही नेटवर्क में हैं।

Android डिवाइस में

  • SSH सर्वर स्थापित करें। SSHelper ने एक आकर्षण की तरह काम किया
  • SSHelper चलाएं और IP पता, पोर्ट और पासवर्ड प्राप्त करने के लिए कॉन्फ़िगरेशन टैब पर जाएं। नीचे दिए गए उदाहरण में, वे 192.168.1.5, 2222 और 'व्यवस्थापक' हैं।
  • डिफ़ॉल्ट पासवर्ड व्यवस्थापक है, लेकिन यदि आप इसे बदलने का निर्णय लेते हैं, तो इसे बदलने के बाद बटन "नए मूल्यों के साथ सर्वर को पुनरारंभ करें"

मशीन में

  • Rsync स्थापित करें। यदि उबंटू का उपयोग करने के लिए यह पहले से ही डिफ़ॉल्ट रूप से स्थापित है।
  • एक खोल खोलें और निम्न कमांड टाइप करें। IP पता और पोर्ट को अपने मानों में बदलें

rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/

  • आपको निम्नलिखित संकेत मिलेगा, अपना पासवर्ड दर्ज करें

SSHelper Version 8.5 Copyright 2014, P. Lutus Default password is "admin" (recommend: change it) username@192.168.1.5's password: admin receiving incremental file list

अन्य सुझावों ने मेरे लिए काम नहीं किया:

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

3

नीचे दिए गए कोड पर Xperia Z ने ठीक काम किया:

  String screenShotFile = "....";
  activity.sendBroadcast(new Intent(
        Intent.ACTION_MEDIA_MOUNTED, Uri
                .fromFile(screenShotFile)));

4.4+ उपयोग के लिए:

activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                                Uri.fromFile(screenShotFile)));

(दुर्भाग्य से मुझे याद नहीं है कि क्या मैंने इसे अच्छी तरह से परीक्षण किया है)

http://commonsware.com/blog/2013/11/06/android-4p4-permission-regressions.html


2

सूचना / भंडारण / अनुकरण। एंड्रॉइड 4.2 में प्रति ऐप / उपयोगकर्ता एक्सेस सामान के लिए कुछ फंकी इम्यूलेट किया गया है, उदाहरण के लिए प्रत्येक उपयोगकर्ता के लिए एक अलग / sdcard /। फ़ाइल को दिखाए गए / sdcard के बजाय / sdcard के बजाय दिखाने की कोशिश करें।


11
सब कुछ /storage/emulated/legacyवैसे भी एक लिंक है , जो खुद एक लिंक है /mnt/shell/emulated/0जिसमें फ़ाइल शामिल है।
चांदनीशेख

2

प्रश्न के लिए प्रस्तावित सरल कोड मैं Android पर MediaStore को कैसे ताज़ा कर सकता हूं? MediaStore का आवश्यक अद्यतन करता है, अगर मुझे बाह्य भंडारण पर फ़ाइल डालने के बाद कहा जाता है। मेरे Nexus 4 की सामग्री विंडो 7 फ़ाइल एक्सप्लोरर में तुरंत ताज़ा हो जाती है।


बस अनुभव किया, कि यह अंततः अपडेट करना बंद कर सकता है।
Stephan

1

मुझे एक निर्देशिका बनाने और अपने ऐप के लिए कुछ नमूना फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता थी। बहुत सारे प्रयोगों और शोधों के बाद, निम्नलिखित प्रक्रिया ने मेरे लिए त्रुटिपूर्ण काम किया:

1) File.mkdir () का उपयोग करके निर्देशिका बनाई गई।

2) निर्देशिका में नकल फ़ाइलें और प्रत्येक फ़ाइल पर MediaScanner चलाते हैं।

MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null, null);

3) निर्देशिका पर MediaScanner चलाएँ।

MediaScannerConnection.scanFile(context, new String[]{directory.getAbsolutePath()}, null, null);

परिणाम: एमटीपी पर पीसी पर फाइलें और निर्देशिका तुरंत दिखाई देती हैं।


डायरेक्टरी और निर्मित विशिष्ट फ़ाइल दोनों को स्कैन करना मेरे लिए काम कर गया। आप दो तत्वों के स्ट्रिंग [] सरणी को तैयार करके दोनों कॉल को भी जोड़ सकते हैं जहाँ फ़ाइल और माता-पिता दोनों सूचीबद्ध हैं। यह भी देखें stackoverflow.com/a/25086535/911550
parvus

1

मेरे OneplusOne के साथ भी ऐसा ही मुद्दा था:

सॉफ्टवेयर अपडेट (6.0.1) के बाद, मैं कंप्यूटर से कनेक्ट होने पर मेरे कैमरे के चित्र नहीं देख पा रहा था (पीटीपी और एमटीपी)। दोनों ऐप के SDRescan और SDscanner का कोई प्रभाव नहीं था।

मेरा समाधान डीसीआईएम से किसी अन्य फ़ोल्डर में टर्मिनल या फोन पर किसी भी फाइल एक्सप्लोरर एप्लिकेशन का उपयोग करके सभी चित्रों को कॉपी करना था। कंप्यूटर से कनेक्ट करते समय मैं कॉपी की गई फ़ाइलों को देख पा रहा था .. मैंने उन्हें अपने कंप्यूटर पर स्थानांतरित कर दिया और अपना कैमरा फ़ोल्डर साफ़ कर दिया। कोई स्थायी समाधान नहीं है, लेकिन इसने मेरे लिए समस्या को कम से कम तब तक ठीक किया जब तक कि मैं अगला बैकअप नहीं करता। = D


0

फ़ाइल बनाने के लिए उपरोक्त उत्तर ठीक हैं। यदि आप बाद में फ़ाइल को हटाते हैं और चाहते हैं कि परिवर्तन भी परिलक्षित हो, तो आप निम्न में से एक कर सकते हैं; चलो पहले दो समाधानों को कवर करते हैं जो ऐसा लगता है कि वे काम करते हैं, लेकिन कुछ उपकरणों पर समस्या पैदा करेंगे। पहले वाला हटाए गए फ़ाइल को स्कैन करने के लिए है:

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));

यह हटाई गई फ़ाइलों के लिए कई उपकरणों पर काम करता है, लेकिन कुछ उपकरणों पर यह वास्तव में एक नई 0-बाइट फ़ाइल बनाने का कारण होगा, जो शायद आप नहीं चाहते हैं। उस स्थिति में, यदि आप <4.4 किटकैट पर चल रहे हैं, तो आप यह कर सकते हैं:

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.fromFile(folder)));

जहां फ़ोल्डर file.getParentFile () के बराबर है। दुर्भाग्य से, किटकैट 4.4 और इसके बाद के संस्करण पर, यह सिक्योरिटी अपवाद को फेंकने के लिए पैदा करेगा, इसलिए उन उपकरणों के लिए, आप मीडिया स्टोर से सीधे हटाने की कोशिश कर सकते हैं:

final Uri externalFilesUri = Files.getContentUri("external");
context.getContentResolver().delete(externalFilesUri, Files.FileColumns.DATA + "=?", new String[] {file.getAbsolutePath()});

मैंने इसे किटकैट पर काम नहीं करने पर ACTION_MEDIA_MUNTED के लिए एक समाधान के रूप में परीक्षण किया है, और यह नेक्सस 5 पर मेरे परीक्षण में काम करता है।


0

हाल ही में मुझे उसी समस्या का सामना करना पड़ा लेकिन कुछ अतिरिक्त शोधों ने छिपी हुई फाइलों को खोजने में मदद की। ऐसा लगता है कि Google ने स्टोरेज स्ट्रक्चर में कुछ बदलाव किए हैं। इन सभी फ़ाइलों को किसी अन्य फ़ोल्डर में ले जाया गया था This Computer\HTC One\Internal Storage\storage\emulated\0। लेकिन यह अजीब है कि सभी फाइलें स्थानांतरित नहीं हुईं।

एंड्रॉइड 4.4.2


0

यहाँ प्रलेखन से , आपको MediaScannerConnection.scanFile पर कॉल करने की आवश्यकता है:

// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,
        new String[] { file.toString() }, null,
        new MediaScannerConnection.OnScanCompletedListener() {
    public void onScanCompleted(String path, Uri uri) {
        Log.i("ExternalStorage", "Scanned " + path + ":");
        Log.i("ExternalStorage", "-> uri=" + uri);
    }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.