2017-01-28 4 views
0

Я использую эмулятор с Android 5.1.1 и устройство Sony с той же версией ОС. Код, используемый (источник: developer.android.com):Вставка контактов работает на эмуляторе, но не на физическом устройстве (Sony Xperia C6603)

import android.content.ContentUris; 
import android.content.ContentValues; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.support.v7.app.AppCompatActivity; 

import static android.R.attr.accountType; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ContentValues values = new ContentValues(); 
    values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType); 
    values.put(ContactsContract.RawContacts.ACCOUNT_NAME, "hello"); 
    Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values); 
    long rawContactId = ContentUris.parseId(rawContactUri); 

    values.clear(); 
    values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); 
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Mike Sullivan"); 
    getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); 
} 
} 

манифеста содержит оба READ_CONTACTS and WRITE_CONTACTS разрешения

код хорошо работает в эмуляторе, но на Sony устройства контакт не отображается. Не существует никаких исключений или ничего, и фильтр установлен для отображения всех контактов (локальный, google и т. Д.). Я нашел аналогичную тему, когда кто-то заявил о проблеме ContactContracts с устройством Sony, но он, по крайней мере, мог видеть имя, я ничего не вижу.

ответ

0

Попробуйте выполнить обе операции (вставка RawContact и вставить данных к нему) в партии, как это:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
     .withValue(RawContacts.ACCOUNT_TYPE, accountType) 
     .withValue(RawContacts.ACCOUNT_NAME, "hello") 
     .build()); 

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan") 
     .build()); 

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);