2

次のコードを使用して、新しい連絡先を作成しています。Android が提供する ContactManager の例に厳密に従います。問題は、作成した連絡先が Android に付属の連絡先アプリに表示されないことです。それにもかかわらず、電話帳からすべての連絡先を読み込むと、新しく作成された連絡先が表示されます。

private void insertPBEntry() は、RemoteException、OperationApplicationException をスローします {

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

     ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
             .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Account type")
             .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Account name")
             .build());

     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "TOTAL_NEW")
             .build());
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "9090")
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_MOBILE)
             .build());     
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

}

私は懸命に検索しましたが、まだ答えを見つけていません。問題が私の文字列「アカウントの種類」と「アカウント名」に関係している可能性があることを示唆する1つの回答が見つかりました。私の場合、アカウントを作成する必要はまったくありません。私が欲しいのは、名前、電子メール/メールアドレス、電話で新しい連絡先を追加することだけです.

みんなありがとう!

4

4 に答える 4

7

Google が提供するサンプル コードが機能します。エミュレーターで実行すると、作成された連絡先を関連付けるアカウントまたはグループが見つかりません。デフォルトでは、この新しく作成された連絡先は表示されません。

実際の電話 (私の場合は HTC Dream) を使用して、コードをフィードするアカウント名とタイプを検出した後、機能します。または、表示可能なグループ ID を取得して、新しい連絡先をそれらのグループの 1 つに関連付けることもできます。

利用可能なアカウントを取得するには:

//accounts
    Account[] accounts = AccountManager.get(act).getAccounts(); 
    for (Account acc : accounts){
        Log.d(TAG, "account name = " + acc.name + ", type = " + acc.type);
    }

グループのリストを取得するには:

//group membership info
    String[] tempFields = new String[] {
            GroupMembership.GROUP_ROW_ID, GroupMembership.GROUP_SOURCE_ID};
    Cursor tempCur = act.managedQuery(Data.CONTENT_URI, tempFields,
             Data.MIMETYPE + "='" + GroupMembership.CONTENT_ITEM_TYPE + "'",
             null, null);

ここで、新しい連絡先をアカウントではなくグループに関連付ける場合:

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE)
            .withValue(GroupMembership.GROUP_SOURCE_ID, *<THE_IDENTIFIED_GROUP_ID>*)
            .build());

それが役に立てば幸い。

于 2010-10-01T02:22:16.743 に答える
5

グループまたはアカウントを持たないエミュレーターにアカウントを追加するには、アカウントまたはグループ ID として「null」を入力し、次のようにコード行を置き換えます。

ops.add(ContentProviderOperation
    .newInsert(ContactsContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)  
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
    .build());
于 2010-12-15T08:20:48.560 に答える
0

HTC SenseとMOTOBLURは、連絡先に問題がある可能性があります。ここにある情報(http://stackoverflow.com/questions/4431101/created-contacts-not-showing-up-on-htc-evo)のいずれかが役立つかどうかはわかりません。

于 2011-03-15T15:37:27.657 に答える
0

グループの可視性をtrueに設定しようとしましたか?

[連絡先]タブで、[表示オプション]> [アカウント]よりもメニューボタンを押し、チェックボックスをオンにして[完了]をクリックします。

于 2010-08-29T13:44:29.617 に答える