插入联系人可在仿真器上运行,但不适用于物理设备(Sony Xperia C6603)

时间:2017-01-28 11:22:57

标签: android contacts android-contacts sony-xperia

我使用Android 5.1.1的仿真器和具有相同操作系统版本的Sony设备。 使用的代码(来源:developer.android.com):

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);
}
}

Manifest包含READ_CONTACTS and WRITE_CONTACTS权限

代码在模拟器中运行良好,但在Sony设备上,联系人不会显示。没有例外或任何内容,过滤器设置为显示所有联系人(本地,谷歌等)。我发现了一个类似的话题,有人说索尼设备有一个ContactContracts问题,但他至少能看到一个名字,我什么也看不见。

1 个答案:

答案 0 :(得分: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);