Android - 创建新的 SIM 卡联系人

Posted

技术标签:

【中文标题】Android - 创建新的 SIM 卡联系人【英文标题】:Android - Create new SIM contact 【发布时间】:2012-06-25 12:58:58 【问题描述】:

我正在尝试将单个联系人写入 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 卡?

感谢任何回复的人。

【问题讨论】:

你好。你的问题解决了吗? @UnknownJoe 检查我的答案 【参考方案1】:

使用以下代码创建新的 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 - 创建新的 SIM 卡联系人的主要内容,如果未能解决你的问题,请参考以下文章

android怎么 添加联系人到手机

怎么添加android新建联系人

Sim 联系人不会显示

SIM卡 --- 联系人查询过程分析

以编程方式获取 android 联系人显示选项

SIM卡 --- 联系人增加/删除/更新 分析