我正在尝试将一个联系人写入SIM卡。

到目前为止,我已经扫描了这些问题:
this, this, this, and this.

我已经获得了this nice library的来源,但是仍然看不到应用程序导出的联系人。更糟糕的是,我已经填满了一张SIM卡,没有任何清除的可能,所以我不得不再拿一张。

没有任何帮助。

这是我的代码:

Uri simUri = Uri.parse("content://icc/adn");
OR RawContacts.CONTENT_URI;

SIM_ACCOUNT_NAME = "vnd.sec.contact.sim";
SIM_ACCOUNT_TYPE = "vnd.sec.contact.sim";



public static final void exportToSim(Context context,
            List<Contact> listContacts) {
        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();

        for (Contact contact : listContacts) {
            if (contact.getPhones() == null)
                continue;
            if (contact.getPhones().isEmpty())
                continue;
            /* Create empty contact */
            int backReference = operations.size();
            operations.add(ContentProviderOperation.newInsert(simUri)
                    .withValue(RawContacts.ACCOUNT_TYPE, SIM_ACCOUNT_TYPE)
                    .withValue(RawContacts.ACCOUNT_NAME, SIM_ACCOUNT_NAME)
                    .build());
            /* Add name Data */
            operations
                    .add(ContentProviderOperation
                            .newInsert(DATA_URI)
                            .withValueBackReference(Data.RAW_CONTACT_ID,
                                    backReference)
                            .withValue(Data.MIMETYPE,
                                    StructuredName.CONTENT_ITEM_TYPE)
                            .withValue(StructuredName.DISPLAY_NAME,
                                    contact.displayName).build());
            /* Add phone data */
            for (Phone phone : contact.getPhones()) {
                operations.add(ContentProviderOperation
                        .newInsert(DATA_URI)
                        .withValueBackReference(Data.RAW_CONTACT_ID,
                                backReference)
                        .withValue(Data.MIMETYPE,
                                CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                        .withValue(CommonDataKinds.Phone.NUMBER, phone.number)
                        .withValue(CommonDataKinds.Phone.TYPE,
                                CommonDataKinds.Phone.TYPE_MOBILE).build());
            }
        }

        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
                    operations);
        } catch (RemoteException e) {
            Log.e(e.getClass().getSimpleName(), e.getMessage());
        } catch (OperationApplicationException e) {
            Log.e(e.getClass().getSimpleName(), e.getMessage());
        }
    }


在simUri等于Uri.parse(“ content:// icc / adn”)的情况下,应用程序因UnsupportedOperationException崩溃,

在simUri等于RawContacts.CONTENT_URI的情况下,会将联系人写入RawCts表中,并将其标记为sim中的联系人,但是在重新加载后,我在任何地方都看不到联系人。看来,它并没有直接写入SIM卡。

SIM_ACCOUNT_TYPE / NAME的值反映了系统应用程序导出的cts中相同的帐户类型/名称对。

应用程序的清单同时包含两个权限:READ和WRITE _CONTACTS

请帮忙。我应该使用什么代码将联系人正确写入SIM卡?

谢谢任何回应。

最佳答案

使用以下代码创建新的SIM卡联系人

void insertSIMContact() {

Uri simUri = Uri.parse("content://icc/adn");

ContentValues values = new ContentValues();
values.put("tag","Mitesh");
values.put("number", "1234");

getContentResolver().insert(simUri, values);
getContentResolver().notifyChange(simUri, null);

}

关于android - Android-建立新的SIM卡联络人,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11169555/

10-13 03:05