【问题标题】:Updating contact photo using CONTACT_ID使用 CONTACT_ID 更新联系人照片
【发布时间】:2014-09-11 21:47:42
【问题描述】:

我已经被这个问题困扰了好几天,希望有人能提供帮助。我正在尝试使用 CONTACT_ID 使用特定图像更新联系人照片,但这似乎不起作用。我必须使用 RAW_CONTACT_ID 才能执行此操作吗?因为理想情况下,我想将同一张照片应用于相同联系人 ID 的所有原始联系人组件。这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {

//set up contact list
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_2,
            null, new String[] {Contacts.DISPLAY_NAME}, new int[] {android.R.id.text1}, 0);
ListView contactList = (ListView)findViewById(android.R.id.list);
contactList.setAdapter(mAdapter);

//set up intents for when a contact is selected
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Log.d(TAG, "action pick");
startActivityForResult(intent, PICK_CONTACT);
} 

@Override
protected void onActivityResult (int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

    super.onResume();

    switch (reqCode) {
    case (PICK_CONTACT):
        if (resultCode == Activity.RESULT_OK) {
            contactData = data.getData();
            //get _ID (contact id based on first column in contact database
            if (contactData != null) {
                Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);
                if (cursor!=null && cursor.moveToNext()) {
                    contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data._ID));
                    cursor.close();

                }
            }

            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.woman);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.PNG, 0, stream);
            byte[] imageBytes = stream.toByteArray();   

             ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
             ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                        .withSelection(ContactsContract.Data._ID + " = ?", new String[] 
                        {contactId}).withValue(ContactsContract.Data.DATA15,imageBytes).build());

             try {
                cr.applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    //view contact
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactId);
    intent.setData(uri);
    startActivity(intent);
    break;
    }

}

我尝试使用 rawContactUri,但我认为这与 RAW_CONTACT_ID 不同。有人对如何做到这一点有任何建议吗?

【问题讨论】:

    标签: android android-contentprovider insert-update contactscontract


    【解决方案1】:

    查看这个,PHOTO_ID 似乎是只读的 (http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html),这表明我无法通过程序更改它。看来其他人已经成功了,所以如果有人找到方法,请告诉我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2014-01-14
      相关资源
      最近更新 更多