Android: как добавить контакт на SIM-карту с помощью SDK? - PullRequest
9 голосов
/ 27 июня 2010

Я пишу приложение, которое записывает контакты на SIM-карту телефона Android. Я застрял в точке, где добавлен номер телефона: исключение происходит без видимой причины.

Вот фрагмент кода.

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.

В телефоне отображается контакт с именем, но без телефона (кстати, добавление телефона к этому контакту с использованием обычного пользовательского интерфейса приводит к добавлению нового контакта с именем и телефоном, а старый контакт только с именем остается).

Есть идеи, почему третья вставка (вторая в таблице данных) завершается неудачно, а две предыдущие (1 в RawContacts и 1 в данных) выполняются успешно?

Ответы [ 3 ]

4 голосов
/ 08 ноября 2010
values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim");

anddroid? Я не смотрел на остальные, но, возможно, стоит удалить 'd'

2 голосов
/ 22 июля 2010

Я повторил это на своей системе, но контакт стирается, как только мобильный телефон перезагружается. Это означает, что контакты сохраняются во временной сим-карте мобильного телефона.Это то же самое происходит на вашей стороне, или я что-то упускаю.Я использую 3G сим.

С уважением

1 голос
/ 09 июля 2010

Data.CONTACT_ID должен быть заменен на Data.RAW_CONTACT_ID

...