2

ContactsContractの連絡先をユーザーのアカウントの1つに追加することはできますが(それ自体は難しいことです!)、表示されるグループに追加することはできません。ユーザーが連絡先オプションに移動して、アカウントの[すべての(その他の)連絡先を表示する]チェックボックスをオンにできることは知っていますが、これは多くのユーザーが知らない追加の手順であるだけではありません。 HTC EVOで試してみましたが、Senseでも可能かどうかはわかりません。

したがって、少なくとも、addToMyContactsGroupと同等のContactsContractを探しています。より広いレベルで、私はより多くの詳細を探しています:

  • 連絡先を追加するために選択したアカウントに応じて、グループに連絡先を追加する最善の方法。
  • ユーザーが[連絡先に追加]ボタンを複数回押した場合に、同じ人の複数のRaw連絡先を積み重ねないようにする方法(連絡先を編集すると、AndroidですべてのRaw連絡先が表示され、個別に編集できます)。
  • 基本的に、連絡先を使用せずにできるだけユーザーフレンドリーにする方法Intents.Insert

プロに感謝します!

4

1 に答える 1

1

グループについてはよくわかりませんが、これは残りに使用したものです。

(説明のために一番下まで読んでください)

宣言:

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

アクションコード:

ops.addAll(fillContentProviderOperation(accounts, ctaList,
                        ops));


private ArrayList<ContentProviderOperation> fillContentProviderOperation(
                    Account[] accounts, ArrayList<ContactToAdd> ctaList,
                    ArrayList<ContentProviderOperation> privateOps) //
{
    for (int i = 0; i < ctaList.size(); i++) //
    {
        if (ctaList.get(i) != null) //
        {
            if (ctaList.get(i).LastName != ""
                    && ctaList.get(i).LastName != null) //
            {
                privateOps.addAll(addToContacts(ctaList.get(i),
                        privateOps.size(), accounts,
                        ctaList.get(i).groupType));

                publishProgress();
            }
        }

    }
    return privateOps;  
}

フィラー コード:

protected ArrayList<ContentProviderOperation> addToContacts(
        ContactToAdd cta, int opsLength, Account[] accounts, String groupName) //
{

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

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
            .withValue(RawContacts.ACCOUNT_TYPE, accounts[0].type)
            .withValue(RawContacts.ACCOUNT_NAME, accounts[0].name).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
            .withValue(StructuredName.GIVEN_NAME, cta.FirstName)
            .withValue(StructuredName.FAMILY_NAME, cta.LastName).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
            .withValue(Phone.NUMBER, cta.DayWorkPhoneNumber.PhoneNumber)
            .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
            .withValue(Email.DATA1, cta.Email)
            .withValue(Email.TYPE, Email.TYPE_MOBILE).build());

    ops.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
            .withValue(StructuredPostal.STREET, cta.MailingAddress.Address1)
            .withValue(StructuredPostal.CITY, cta.MailingAddress.City)
            .withValue(StructuredPostal.REGION,
                    cta.MailingAddress.StateCode)
            .withValue(StructuredPostal.POSTCODE,
                    cta.MailingAddress.PostalCode)
            .withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
            .build());

    ops.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
            .withValue(StructuredPostal.STREET,
                    cta.ShippingAddress.Address1)
            .withValue(StructuredPostal.CITY, cta.ShippingAddress.City)
            .withValue(StructuredPostal.REGION,
                    cta.ShippingAddress.StateCode)
            .withValue(StructuredPostal.POSTCODE,
                    cta.ShippingAddress.PostalCode)
            .withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
            .build());

    return ops;
}

このコードは基本的に、連絡先データベースに挿入する複数の値で大きな ArrayList ops を埋めます。

.withValueBackReference(opsLength) を使用していることを確認して、正しい生の連絡先に戻るようにする必要があります。

このコードは、2.2 を実行している HTC Incredible でテストされ、動作します。

幸運を!

于 2011-06-28T13:59:34.030 に答える