Android,以编程方式在SIM上创建联系人

时间:2016-02-19 12:03:12

标签: java android android-5.0-lollipop android-6.0-marshmallow

我正在尝试在SIM(Nexus 5 Marshmallow)创建联系人。

    String name = (String)nameEditText.getText().toString();
    String phoneNumber = (String)phoneNumberEditText.getText().toString();

    String result = null;

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

    ops.add(ContentProviderOperation.newInsert(
            ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim")
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "SIM")
            .build());

    ops.add(ContentProviderOperation.newInsert(
            ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
            .withValue(
                    ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                    name).build());

    ops.add(ContentProviderOperation.
            newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber)
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                    ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            .build());

    // Asking the Contact provider to create a new contact
    try {
        getContentResolver().applyBatch("com.android.contacts", ops);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e.toString());
    }

但它会在手机记忆中创建一个联系人。

作为第一个applyBatch的参数,我也尝试了"com.android.contacts""com.android.contacts.sim""content://icc/adn"。它也不能正常工作。

2 个答案:

答案 0 :(得分:0)

请尝试以下代码。

Uri simUri = Uri.parse("content://icc/adn");
ContentValues cv = new ContentValues();
cv.put("tag", "Me");
cv.put("number", "yourphonenumber");
getContentResolver().insert(simUri, cv);

确保您拥有授予应用程序所需的权限。

答案 1 :(得分:0)

我遇到了同样的问题,一直在寻找答案 我所做的是将ContactsContract.RawContacts.ACCOUNT_TYPE值更改为com.android.sim,如下所示:

withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.android.sim")

它工作正常。