1

API を使用して、古い API ではなく API 2.x を使用して連絡先を作成しようとしています。ここhttp://developer.android.com/guide/topics/providers/content-providers.html古い API についてのみ説明しています。連絡先の作成方法を示す適切なチュートリアル、例などは見つかりませんでした。生の連絡先を作成する必要があることがわかった限り、生の連絡先の下でhttp://developer.android.com/reference/android/provider/ContactsContract.RawContacts.htmlを見つけました そこから試してみました

ContentValues values = new ContentValues(); 
values.put(RawContacts.ACCOUNT_TYPE, accountType); //accountType = "xxxx"
values.put(RawContacts.ACCOUNT_NAME, accountName); //accountName = "aaaa"
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 
long rawContactId = ContentUris.parseId(rawContactUri); 
values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan"); 
getContentResolver().insert(Data.CONTENT_URI, values);

コードの最後の行は、「Data.CONTENT_URI」を解決できないことを示しています。このコード行は 1.6 API 用のように見えます。Data.CONTENT_URI を ContactsContract.Data.CONTENT_URI に変更しました。少なくともコードはコンパイルおよび実行されますが、その後、アドレス帳に Mike Sullivan の連絡先がありません。他の「データ」も「ContactsContract.Data」と交換しましたが、まだ変更はありません。

2.x のアドレス帳に人物を作成する簡単な例はありますか?

編集:私はいくつかの進歩を遂げました.連絡先を追加するには、携帯電話に常にアカウントが必要なようです. 私の電話のアカウント タイプは com.google で、アカウント名は xxxxx@gmail.com です。エミュレータには何もありません。どのアカウントに連絡先を追加する必要があるのだろうか? 私は常に 1 つの Gmail アカウントを持っていると仮定して、このアカウントを取得できますか?

4

1 に答える 1

0

このようなものをお探しですか?

{ // insert a new data item
    // first we need to get a raw contact corresponding to the contact.
    Cursor rawCur = getContentResolver().query(RawContacts.CONTENT_URI,
         new String[]{RawContacts._ID},
         RawContacts.CONTACT_ID + "=?",
         new String[]{String.valueOf(contactId)}, null);

    long rawContactId = -1;
    for (boolean moreRaws = rawCur.moveToFirst(); moreRaws;
        moreRaws = rawCur.moveToNext()) 
    {
        rawContactId = rawCur.getLong(rawCur.getColumnIndex(RawContacts._ID));
    }

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    

    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
       .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
       .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"y123-456-7890")
          .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                     ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME)
       .build());

    try {
       ContentProviderResult[] results = 
                   getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
       logger.info("result: "+results[0]);
    } catch (UnsupportedOperationException ex) {
       ex.printStackTrace();
    } catch (RemoteException ex) {
       ex.printStackTrace();
    } catch (OperationApplicationException ex) {
       ex.printStackTrace();
    } 
    }
于 2010-11-24T00:08:38.480 に答える