2013-04-30 14 views
5

Merhaba Ben content://com.android.contacts/contacts/550/photo gibi görünüyor bir içerik uri var.android iletişim fotoğraf için dosya sistemi yolunu almak

Bu içeriğe verilen uri dosyasını fiziksel olarak tanıtmam gerekiyor.
Stackoverflow üzerinde tartışılan örneklerin bazılarına baktım, ancak bunların hiçbiri işe yaramıyor.

herhangi bir öneriniz?

cevap

1

Burada, dizeleri alan ve bu fotoğrafın bir dosyasını oluşturan ve işlem bittiğinde dosyayı silen bir yöntem. Bunu şu şekilde kullanın: loadContactPhotoThumbnail ("content: //com.android.contacts/contacts/550/photo");. Ben here kod çoğunu aldı

 private String loadContactPhotoThumbnail(String photoData) { 
    // Creates an asset file descriptor for the thumbnail file. 
    AssetFileDescriptor afd = null; 
    FileOutputStream outputStream = null; 
    InputStream inputStream = null; 
    // try-catch block for file not found 
    try { 
     // Creates a holder for the URI. 
     Uri thumbUri; 
     // If Android 3.0 or later 
     if (Build.VERSION.SDK_INT 
       >= 
      Build.VERSION_CODES.HONEYCOMB) { 
      // Sets the URI from the incoming PHOTO_THUMBNAIL_URI 
      thumbUri = Uri.parse(photoData); 
     } else { 
     // Prior to Android 3.0, constructs a photo Uri using _ID 
      /* 
      * Creates a contact URI from the Contacts content URI 
      * incoming photoData (_ID) 
      */ 
      final Uri contactUri = Uri.withAppendedPath(
        Contacts.CONTENT_URI, photoData); 
      /* 
      * Creates a photo URI by appending the content URI of 
      * Contacts.Photo. 
      */ 
      thumbUri = 
        Uri.withAppendedPath(
          contactUri, Photo.CONTENT_DIRECTORY); 
     } 

    /* 
    * Retrieves an AssetFileDescriptor object for the thumbnail 
    * URI 
    * using ContentResolver.openAssetFileDescriptor 
    */ 
    afd = activity.getContentResolver(). 
      openAssetFileDescriptor(thumbUri, "r"); 

    FileDescriptor fdd = afd.getFileDescriptor(); 
    inputStream = new FileInputStream(fdd); 
    File file = File.createTempFile("PhoneContactProvider", "tmp"); 
    file.deleteOnExit(); 
    outputStream = new FileOutputStream(file); 
    byte[] buffer = new byte[1024]; 
    int len; 
    while ((len = inputStream.read(buffer)) != -1) { 
     outputStream.write(buffer, 0, len); 
    } 
    inputStream.close(); 
    outputStream.close(); 
    return "file://" + file.getAbsolutePath(); 
    } catch (Exception e) { 
     App.logger().e(this.getClass().getSimpleName(), e.getMessage()); 
    } 
    // In all cases, close the asset file descriptor 
    finally { 
     if (afd != null) { 
      try { 
       afd.close(); 
      } catch (IOException e) {} 
     } 
     if (inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch (IOException e) {} 
     } 
     if (outputStream != null) { 
      try { 
       outputStream.close(); 
      } catch (IOException e) {} 
     } 
    } 
    return null; 
} 

UYARI: ANDROİD VERSİYONU 4.1.2 ve 4.0.3

İLE emülatörünüzde bu ALIŞKANLIK ÇALIŞMA
İlgili konular