2012-12-13 21 views
13

में लोड संपर्क छवि लोड करें जो मैं फ़ोन नंबर से संपर्क छवि थंबनेल के उरी प्राप्त करने के लिए उपयोग करता हूं। :बिटमैप

public static Uri getPhotoURIFromAddress(Context activity, String address) { 
    String contactId = getContactIdFromAddress(activity, address); 

    ContentResolver contentResolver = activity.getContentResolver(); 
    try { 
     Cursor cursor = contentResolver 
       .query(ContactsContract.Data.CONTENT_URI, 
         null, 
         ContactsContract.Data.CONTACT_ID 
           + "=" 
           + contactId 
           + " AND " 

           + ContactsContract.Data.MIMETYPE 
           + "='" 
           + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE 
           + "'", null, null); 

     if (cursor != null) { 
      if (!cursor.moveToFirst()) { 
       return null; // no photo 
      } 
     } else { 
      return null; // error in cursor process 
     } 
     cursor.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 

    Uri person = ContentUris.withAppendedId(
      ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)); 
    return Uri.withAppendedPath(person, 
      ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
} 

कौन सा के रूप में एक उरी वापस आ जाएगी: अब

content://com.android.contacts/contacts/799/photo 

, अगर मैं setImageUri (URI) समारोह के साथ एक imageView में इस उरी उपयोग करते हैं, यह काम करता है।

लेकिन बिटमैप लोड करना एक समस्या है। मैं जिस फ़ंक्शन का उपयोग कर रहा हूं वह है:

public static Bitmap getContactBitmapFromURI(Context context, Uri uri) { 
     InputStream input = ContactsContract.Contacts 
       .openContactPhotoInputStream(context.getContentResolver(), uri); 
     if (input == null) { 
      return null; 
     } 
     return BitmapFactory.decodeStream(input); 
    } 

जो हमेशा क्रैश होता है। लॉगकैट है:

12-13 21:40:26.016: E/AndroidRuntime(9076): FATAL EXCEPTION: main 
12-13 21:40:26.016: E/AndroidRuntime(9076): java.lang.RuntimeException: Unable to start receiver com.daksh.fss.SMSReceiver: java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/799/photo/photo, calling user: com.daksh.fss, calling package:com.daksh.fss 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2362) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.app.ActivityThread.access$1500(ActivityThread.java:142) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.os.Looper.loop(Looper.java:137) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.app.ActivityThread.main(ActivityThread.java:4931) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at dalvik.system.NativeStart.main(Native Method) 
12-13 21:40:26.016: E/AndroidRuntime(9076): Caused by: java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/799/photo/photo, calling user: com.daksh.fss, calling package:com.daksh.fss 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.content.ContentResolver.query(ContentResolver.java:370) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.content.ContentResolver.query(ContentResolver.java:313) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:1973) 
12-13 21:40:26.016: E/AndroidRuntime(9076):  at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:2004) 

कृपया मदद करें!

उत्तर

31

मुझे नहीं लगता कि आपको फोटो के यूरी को कॉन्टैक्टफोटइनपुट स्ट्रीम खोलने के लिए पास करना चाहिए। बिटमैप प्राप्त करने के लिए आपको केवल संपर्क की यूरी पास करने की आवश्यकता है।

Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); 
    InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream(
      mContext.getContentResolver(), uri); 

या तो आप

public static Bitmap getContactBitmapFromURI(Context context, Uri uri) { 
     InputStream input = context.getContentResolver().openInputStream(uri) 
     if (input == null) { 
      return null; 
     } 
     return BitmapFactory.decodeStream(input); 
    } 
+0

बहुत बहुत शुक्रिया इस्तेमाल कर सकते हैं अगर आप संपर्क तस्वीर uri पारित करने के लिए जा रहे हैं! कोड का दूसरा भाग पूरी तरह से काम किया! – Daksh

+0

अगर मदद मिली तो जवाब स्वीकार करें। – nandeesh