2010-06-27 148 views
9

我正在写一个将联系人写入Android手机SIM卡的应用程序。我被困在电话号码被添加的地方:发生异常,没有明显的原因。Android:如何使用SDK将联系人添加到SIM卡?

这是一段代码。

import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.ContentUris; 
import android.content.ContentValues; 
import android.provider.ContactsContract.RawContacts; 
import android.provider.ContactsContract.Data; 
import android.provider.ContactsContract.RawContactsEntity; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.CommonDataKinds.StructuredName; 
import android.provider.ContactsContract.RawContacts.Entity; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.TextView; 
[...] 
try{ 
      // add a row to the RawContacts table 
    ContentValues values = new ContentValues(); 
    values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim"); 
    values.put(RawContacts.ACCOUNT_NAME, "SIM"); 
    Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 

      // get the ID of the newly-added line 
    long rawContactId = ContentUris.parseId(rawContactUri); 

      // add a "name" line to the Data table, linking it to the new RawContact 
      // with the CONTACT_ID column 
    values.clear(); 
    values.put(Data.RAW_CONTACT_ID, rawContactId); 
    values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
    values.put(StructuredName.DISPLAY_NAME, "Name"); 
    cr.insert(Data.CONTENT_URI, values); 
      // this insert succeeds 

      // add a "phone" line to the Data table, linking it to the new RawContact 
      // with the CONTACT_ID column 
    values.clear(); 
    values.put(Data.CONTACT_ID, rawContactId); 
    values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
    values.put(Phone.NUMBER, "+12345678901"); 
    values.put(Phone.TYPE, Phone.TYPE_MOBILE); 
    cr.insert(Data.CONTENT_URI, values); 
      // this insert fails with a NullPointerException 
} 
catch(Exception e){ 
    String xx=e.toString(); 
    System.out.println(xx); 
} 

该应用程序具有权限android.permission.READ_CONTACTS和android.permission.WRITE_CONTACTS。

电话显示与姓名但没有电话的联系人(顺便说一句,使用普通UI将电话添加到该联系人导致添加了新联系人,姓名和电话以及只有姓名留守的旧联系人) 。

任何想法为什么第三次插入(Data表中的第二次插入)失败,而之前的两次(RawContacts中的1次和Data中的1次)成功?

+0

如果您也发布异常堆栈跟踪,这也会非常有用 – ognian 2010-06-27 18:43:01

+1

您的意思是,在catch语句中放置一个断点并粘贴堆栈追踪断点时是否追踪(即发现异常)?你能看到哪个函数抛出异常吗? 然而, Data.RAW_CONTACT_ID 解决更换 Data.CONTACT_ID 。 – user377486 2010-06-27 21:14:00

回答

1

Data.CONTACT_ID必须由Data.RAW_CONTACT_ID

2

我复制了这一个我的系统上进行更换,但随着移动restart.This意味着联系人保存在临时SIM卡的接触得到尽快删除的手机。 这是发生在你身边还是我错过了一些东西。 我正在使用3G SIM卡。

问候

+1

Hi Rohit。其实这里也是一样的。显然,RawContacts表在启动时与SIM电话簿同步,但访问它与访问实际的SIM电话簿不同。我想知道如何去做,或者至少如何触发SIM电话簿和RawContacts之间的重新同步... – user377486 2010-07-24 16:45:49

+0

您是否找到了解决方案? – UnknownJoe 2012-06-23 14:12:36

4
values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim"); 

anddroid?我没有看看其余部分,但可能值得删除'd'

相关问题