2011-10-30 7 views
6

से उरी प्राप्त करें मेरे पास "फ़ाइल: ///mnt/sdcard/3dphoto/temp19.jps" जैसी फ़ाइल का वास्तविक पथ है, मैं "सामग्री: // मीडिया/बाहरी" जैसी उरी कैसे प्राप्त कर सकता हूं/छवियों/मीडिया/1 "?असली पथ

+0

लगता है http://stackoverflow.com/questions/5657411/android-getting-a-file-uri-from-a-content-uri से संबंधित क्या आप संदर्भ प्रदान कर सकते हैं? – Renaud

उत्तर

6

फ़ाइल पथ में अपनी "फ़ाइल: // ..." को बदलें, आइटम के आईडी को निम्न कोड से ढूंढें, और फिर इसे प्रदाता यूआरआई में संलग्न करें। इसके अलावा, फ़ाइल एक्सटेंशन के आधार पर, सही प्रदाता

/** 
* Given a media filename, returns it's id in the media content provider 
* 
* @param providerUri 
* @param appContext 
* @param fileName 
* @return 
*/ 
public long getMediaItemIdFromProvider(Uri providerUri, Context appContext, String fileName) { 
    //find id of the media provider item based on filename 
    String[] projection = { MediaColumns._ID, MediaColumns.DATA }; 
    Cursor cursor = appContext.getContentResolver().query(
      providerUri, projection, 
      MediaColumns.DATA + "=?", new String[] { fileName }, 
      null); 
    if (null == cursor) { 
     Log.d(TAG_LOG, "Null cursor for file " + fileName); 
     return ITEMID_NOT_FOUND; 
    } 
    long id = ITEMID_NOT_FOUND; 
    if (cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     id = cursor.getLong(cursor.getColumnIndexOrThrow(BaseColumns._ID)); 
    } 
    cursor.close(); 
    return id; 
} 

कभी कभी MediaProvider immediatly रीफ्रेश नहीं होता के बाद एक मीडिया फ़ाइल है (उदाहरण के MediaStore.Video.Media.EXTERNAL_CONTENT_URI या MediaStore.Image.Media.EXTERNAL_CONTENT_URI के लिए) का उपयोग डिवाइस के भंडारण में जोड़ा गया। आप इस पद्धति का उपयोग अपने रिकॉर्ड को ताज़ा करने के लिए मजबूर कर सकते हैं:

/** 
* Force a refresh of media content provider for specific item 
* 
* @param fileName 
*/ 
private void refreshMediaProvider(Context appContext, String fileName) { 
    MediaScannerConnection scanner = null; 
    try { 
     scanner = new MediaScannerConnection(appContext, null); 
     scanner.connect(); 
     try { 
      Thread.sleep(200); 
     } catch (Exception e) { 
     } 
     if (scanner.isConnected()) { 
      Log.d(TAG_LOG, "Requesting scan for file " + fileName); 
      scanner.scanFile(fileName, null); 
     } 
    } catch (Exception e) { 
     Log.e(TAG_LOG, "Cannot to scan file", e); 
    } finally { 
     if (scanner != null) { 
      scanner.disconnect(); 
     } 
    } 
} 
+0

फिर मुझे संदर्भ में क्या जाना चाहिए? – newstartgirls

+0

एप्लिकेशन का संदर्भ, कॉलिंग गतिविधि, कोड को कॉल करने से आप किसी भी प्रकार का संदर्भ प्राप्त कर सकते हैं ... – Rainbowbreeze

+0

कोई भी जानता है कि रिवर्स कैसे संभव है? असल में मैं "सामग्री: //" –

6

मैं अपनी फ़ाइल एक्सप्लोरर गतिविधि के लिए एक ही सवाल था ... लेकिन यू knw चाहिए tht फ़ाइल के लिए contenturi केवल छवि, ऑडियो और वीडियो की तरह Mediastore डेटा का समर्थन करता है .... मैं sdcard से एक छवि का चयन से छवि सामग्री uri प्राप्त करने के लिए आप दे रहा हूँ .... इस कोड की कोशिश ... यह आप के लिए काम करेंगे हो सकता है ...

public static Uri getImageContentUri(Context context, File imageFile) { 
     String filePath = imageFile.getAbsolutePath(); 
     Cursor cursor = context.getContentResolver().query(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       new String[] { MediaStore.Images.Media._ID }, 
       MediaStore.Images.Media.DATA + "=? ", 
       new String[] { filePath }, null); 
     if (cursor != null && cursor.moveToFirst()) { 
      int id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.MediaColumns._ID)); 
      Uri baseUri = Uri.parse("content://media/external/images/media"); 
      return Uri.withAppendedPath(baseUri, "" + id); 
     } else { 
      if (imageFile.exists()) { 
       ContentValues values = new ContentValues(); 
       values.put(MediaStore.Images.Media.DATA, filePath); 
       return context.getContentResolver().insert(
         MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
      } else { 
       return null; 
      } 
     } 
    } 
+0

से एक फ़ाइल बनाना चाहता हूं और क्या होगा यदि यह कोई छवि या वीडियो नहीं है? तब हमें क्या करना चाहिए? – soshial

1

एक और आसान तरीका:

File file = new File(Path); 

Uri uri = Uri.fromFile(file); 
+1

यह किसी मामले में हल नहीं हो सकता है: फ़ोल्डर का विशेष चरित्र। अच्छा नही। –

संबंधित मुद्दे