2017-03-21 11 views
0

私はContact.Pickerを使用しています。連絡先番号を取得するには以下のコードを使用しています。連絡先に画像があり、画像ビューに設定したい場合は、何人か働いている人は誰もビットマップを使用していませんが、誰も私のマシュマロで働いていませんよ!あなたが試すことができます連絡先の写真を取得してAPIの画像ビューに設定する

case (PICK_CONTACT): 
      Cursor cursor = null; 
      String phoneNumber = ""; 
      String image=""; 
      List<String> allNumbers = new ArrayList<String>(); 
      int phoneIdx = 0; 
      String photoId = ""; 
      try { 
       Uri result = data.getData(); 
       String id = result.getLastPathSegment(); 
       cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{id}, null); 
       phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA); 

       if (cursor.moveToFirst()) { 
        while (cursor.isAfterLast() == false) { 
         phoneNumber = cursor.getString(phoneIdx); 

         allNumbers.add(phoneNumber); 

         cursor.moveToNext(); 
        } 
       } else { 
        //no results actions 
       } 
      } catch (Exception e) { 
       //error actions 
      } finally { 
       if (cursor != null) { 
        cursor.close(); 
       } 

       final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]); 
       AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
       builder.setTitle("Choose a number"); 
       builder.setItems(items, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int item) { 
         String selectedNumber = items[item].toString(); 

String selectedNumber = phoneNumber.toString(); 
//Contact photo pick code 
         Bitmap hello= retrieveContactPhoto(MainActivity.this,selectedNumber); 
        avatar.setImageBitmap(hello); 
        Log.d("Bitmapis",hello+""); 

         selectedNumber = selectedNumber.replace("-", ""); 
         number.setText(selectedNumber); 
        } 
       }); 
       AlertDialog alert = builder.create(); 
       if (allNumbers.size() > 1) { 
        alert.show(); 
       } else { 
        String selectedNumber = phoneNumber.toString(); 
enter code here 

        selectedNumber = selectedNumber.replace("-", ""); 

        number.setText(selectedNumber); 
       } 

       if (phoneNumber.length() == 0) { 
        //no numbers found actions 
       } 
      } 
      break; 
    } 

    public static Bitmap retrieveContactPhoto(Context context, String number) { 
    ContentResolver contentResolver = context.getContentResolver(); 
    String contactId = null; 
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

    String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; 

    Cursor cursor = 
      contentResolver.query(
        uri, 
        projection, 
        null, 
        null, 
        null); 

    if (cursor != null) { 
     while (cursor.moveToNext()) { 
      contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
     } 
     cursor.close(); 
    } 

    Bitmap photo = BitmapFactory.decodeResource(context.getResources(), 
      R.drawable.man); 

    try { 
     InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), 
       ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactId))); 

     if (inputStream != null) { 
      photo = BitmapFactory.decodeStream(inputStream); 
     } 

     assert inputStream != null; 
     inputStream.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return photo; 
} 
+0

あなたはどんな写真に関連するコードを持っていません掲載のコードは、あなたが写真を取得するために使用しようとしていたが、私の更新されたコードを確認し@marmor – marmor

+0

を動作しませんでしたコードを投稿してください! –

答えて

0

2つのこと:docs

  1. 、2つのサンプルコード、サムネイルサイズの写真のための1つ、高品質のいずれかの他のがあります。連絡先には1つの連絡先しかない場合もありますが、私はあなたのコードで両方のオプションを試してみることをお勧めします。
  2. あなたが電話にそれを変換し、PICK_CONTACT意図からCONTACT_IDを取得しているし、次にretrieveContactPhotoにあなたが戻ってPhoneLookupを使用してCONTACT_IDに電話を変換しているようです。これは、元のCONTACT_IDを取得する保証はありません、あなたは同じ電話でいくつかの他の連絡先を得ることができる、私はretrieveContactPhotoメソッドに元のIDを渡すことをお勧めします。
関連する問題