我正在写一个将联系人写入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次)成功?
如果您也发布异常堆栈跟踪,这也会非常有用 – ognian 2010-06-27 18:43:01
您的意思是,在catch语句中放置一个断点并粘贴堆栈追踪断点时是否追踪(即发现异常)?你能看到哪个函数抛出异常吗? 然而, Data.RAW_CONTACT_ID 解决更换 Data.CONTACT_ID 。 – user377486 2010-06-27 21:14:00