我正在尝试将联系人添加到 SIM 卡,它们似乎已添加到 SIM 卡,但只有在重新启动设备后才可见(即使是本机联系人应用程序)。
这是我正在使用的代码:
final Uri uri = Uri.parse("content://icc/adn");
ContentValues mContentValue = new ContentValues();
mContentValue.put("tag", contactName);
mContentValue.put("number", contactNumber);
getContentResolver().insert(uri, mContentValue);
创建联系人后同步联系人数据库是否有问题?如果是这样,有没有办法强制android将联系人数据库与SIM卡同步?
EDIT
好吧,让我再次解释一下我的问题。这是一个有同样问题的人,但没有任何答案(添加联系人到SIM卡时,只有重启设备后才会显示 https://stackoverflow.com/questions/24485735/when-adding-contacts-to-sim-card-they-are-only-displayed-after-rebooting-the-de?rq=1),所以我需要再问一遍。
帐户类型:com.android.contacts.sim and ACCOUNT_NAME:SIM 卡对于我的手机来说是错误的。我从ContactsContract.Settings.CONTENT_URI: com.android.huawei.phone - 电话 and com.android.huawei.sim - sim1。
这是我的代码:
ArrayList<ContentProviderOperation> op = new ArrayList<>();
Uri simUri = Uri.parse("content://icc/adn");
ContentValues values = new ContentValues();
values.put("tag", "NAME");
values.put("number", "77777777777");
try {
Uri uri = context.getContentResolver().insert(simUri, values);
int efid = 0,index = 0;
Pattern pattern = Pattern.compile("^content://icc/adn/(\\d+)/(\\d+)$*");
Matcher matcher = pattern.matcher(uri.toString());
if(matcher.matches()) {
index = Integer.parseInt(matcher.group(1));
efid = Integer.parseInt(matcher.group(2));
}
ArrayAdapterSpinner.Item item = adapter.getItem(spinner.getSelectedItemPosition());
op.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.android.huawei.sim")
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "sim1")
.withValue(ContactsContract.RawContacts.SYNC1,efid)
.withValue(ContactsContract.RawContacts.SYNC2,index)
.build());
op.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());
op.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, "77777777777")
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
try {
ContentProviderResult[] cprs = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, op);
} catch (Exception e) {
Log.e("ERROR", e.getMessage());
}
} catch(Exception e) {
Log.e("ERROR2", e.toString());
}
但结果是:
1. 联系方式icc/adn被建造
2. 联系方式原始联系人已创建,但是帐户类型 and
帐户名称被替换为com.android.huawei.phone - 电话