0

バイトストリームを書き込まずに、2つの連絡先のプロフィール写真を交換したい!PHOTO_FILE_ID、PHOTO_ID、PHOTO_THUMBNAIL_URI、PHOTO_URIをcontentResolverで更新できるかどうか疑問に思いました。それも可能ですか?

これは私が試したコードです(実行可能ではなく、コード全体の一部をコピーしただけです):これは私が情報を読む方法です:

String[] projection = new String[]{ ContactsContract.Data._ID,
        ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID,
        ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID,
        ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI,
        ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI};

Cursor cursor = this.contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, ContactsContract.Data.MIMETYPE + " LIKE ?",
           new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }, null);

if( cursor.moveToFirst() ){
    long ID = cursor.getLong( cursor.getColumnIndex(
            ContactsContract.Data._ID) );
    Integer photoFileID = cursor.getInt( cursor.getColumnIndex(
            ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID) );
    Integer photoID = cursor.getInt( cursor.getColumnIndex(
            ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID) );
    String photoThumbnailURI = cursor.getString( cursor.getColumnIndex(
            ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) );
    String photoURI = cursor.getString( cursor.getColumnIndex(
            ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI) );
}
cursor.close();

これが私が別の連絡先に情報を書き込もうとした方法です:

ContentValues contentValues =  new ContentValues();
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID, photoFileID);
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID, photoID);
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, photoThumbnailURI);
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI, photoURI);

String where = ContactsContract.Data._ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " LIKE ?";
String[] params = new String[] { String.valueOf(ID), 
                                ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE };

this.contentResolver.update(ContactsContract.Data.CONTENT_URI, contentValues, where, params);

このスクリプトを実行すると、デバッガーは列が無効であると通知します...別の方法で写真の詳細を更新する方法はありますか?

4

1 に答える 1

0

はい、これは連絡先データベースの紛らわしい部分です。

「写真」列はContactsContract.CommonDataKinds.StructuredNameに継承されますが、これらのはStructuredNames行では認識されません。

交換するContactsContract.Contacts列で投稿を更新する場合は、写真を交換するための推奨される方法をお勧めします。

于 2012-12-05T19:37:42.293 に答える