2012-01-04 19 views
0

連絡先の写真、メッセージングアプリに表示される種類、新しいGmail通知を取得する際に問題が発生しています。私はいくつかの例のコードを見てきましたが、何も私のために働いていない、これは私が現在持っているものである連絡先の写真を取得する

この写真のURIを取得し、使用するか、少なくともそれはそうするためにビットマップイメージにそれを有効にする必要があり

public static Bitmap getContactImage(long id,Context context){ 
    InputStream input = getPhoto(id,context); 
    if(input == null){ 
     return null; 
    } 
    return BitmapFactory.decodeStream(input); 
} 

public static InputStream getPhoto(long contactId,Context context){ 
    Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 
    Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY); 
    InputStream in = null; 
    try{ 
     in = context.getContentResolver().openInputStream(photoUri); 
    }catch(FileNotFoundException e){ 
     Log.d(TAG, e.toString()); 
    } 
    return in; 
} 

が、これは私が(それに対して問い合わせたり、人の番号を検索して確認)接触ID罰金を取得しますが、それは、連絡先の写真を見つけることができません

long contactID = 0; 
       Bitmap image = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_contact_picture); 
       Cursor contact = context.getContentResolver().query(Data.CONTENT_URI,new String[] {Data.CONTACT_ID},Email.ADDRESS + "='" + from + "'",null,null); 
       if(contact.moveToFirst() && contact != null){ 
        contactID = contact.getLong(0); 
        image = getContactImage(contactID,context); 
       } 

を呼び出す方法です。私は写真があることを知っている。確かめるために自分自身に対してテストしているので、私はコンタクト写真があるので、他に何をすべきか分からない。

私はいつも連絡先の手配を非常に面倒であると感じています。

答えて

1

は、私は、それを得た私はMIMETYPERAW_CONTACT_IDに対してクエリを行なったし、それは私が、私はそれを試してみました

Cursor p = context.getContentResolver().query(Data.CONTENT_URI,new String[] {Photo.PHOTO}, 
       Data.RAW_CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE + "='" + Photo.CONTENT_ITEM_TYPE+"'" 
       ,null,null); 
0

これは私のために働く。

//Querying for all contacts(Apply selection parameter in query to get a specific contact) 

Uri contacts = ContactsContract.Contacts.CONTENT_URI; 

cur = null; 
cur = Main.context.getContentResolver().query(contacts, null, null, 
        null, null);  

int contactIdIndex = cur.getColumnIndex(ContactsContract.PhoneLookup._ID); 
int contactId = cur.getInt(contactIdIndex); 

//写真

Uri contactUri = ContentUris.withAppendedId(
        ContactsContract.Contacts.CONTENT_URI, contactId); 

      Uri photoUri = Uri.withAppendedPath(contactUri, 
        ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 

      Cursor cursor = cr 
        .query(
          photoUri, 
          new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO }, 
          null, null, null); 

      if (cursor != null && cursor.moveToFirst()) { 
       byte[] data = cursor.getBlob(0); 

       _conEntry.setPhoto(data); 
//Data is the photo bytes for you 

      } 

      if (cursor != null) 
       cursor.close(); 
0

あなたは間違ってそれをやっています。

まず、ContactsContract.ContactsテーブルのPHOTO_ID列から写真のIDを取得します。次に、前の手順で取得したIDを使用してContactsContract.DataからPHOTO列(実際にはDATA15のエイリアス)からバイト配列を取得します。最後に、BitmapFactoryを使用してバイト配列をデコードし、ビットマップを取得します。これについてのドキュメントは Hereです。

+0

を探していた写真を与えたが、それは仕事をdidntの、私は 'カーソルpをしなければなりませんでした= context.getContentResolver()。query(Data.CONTENT_URI、新しい文字列[] {Photo.PHOTO}、 \t \t \t Data.RAW_CONTACT_ID + "=" + contactId + "AND" + Data.MIMETYPE + "=" "+ Photo .CONTENT_ITEM_TYPE + "'" \t \t \t、ヌル、ヌル);'それは私のイメージを持っています – tyczj

関連する問題