8

Android2.1以降をサポートする必要があります。

GoogleはContactsContractの使用方法の例を投稿しましたが、APIレベル11以降で利用可能なものを使用しているものもあるため、即興で作成する必要がありますが、行き詰まります。

だから、これまで私はこれを持っています:

            String firstName = contactProperties.get("firstName");
            String lastName = contactProperties.get("lastName");
            String phone = contactProperties.get("phone");
            String email = contactProperties.get("email");
            String company = contactProperties.get("company");
            String postal = contactProperties.get("street") + ", " + contactProperties.get("city") + ", " + contactProperties.get("state") + " " + contactProperties.get("zip") + " " + contactProperties.get("country");

            // Creates a new intent for sending to the device's contacts application
            Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION);

            // Sets the MIME type to the one expected by the insertion activity
            insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
            insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, firstName + " " + lastName);
            insertIntent.putExtra(ContactsContract.Intents.Insert.EMAIL, email);
            insertIntent.putExtra(ContactsContract.Intents.Insert.PHONE, phone);
            insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, company);
            insertIntent.putExtra(ContactsContract.Intents.Insert.POSTAL, postal);

            // Send out the intent to start the device's contacts app in its add contact activity.
            startActivity(insertIntent);

NAMEPOSTALエクストラをどのように構成したかに注意してください。これはすべてのデバイスで機能するわけではありませんが、一部の名簿では、都市、州、郵便番号のフィールドだけでなく、名前と名前のフィールドが区切られているためです。したがって、私の「解決策」はかなりばかげているように見えます。名フィールドには名と姓の両方があり、番地フィールドには完全な住所があります。どうすればこれを修正できますか?誰かが私に例を教えてくれますか?

記録のために、これは機能しません:

insertIntent.putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, contactProperties.get("street"));
insertIntent.putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, contactProperties.get("city"));

また、連絡先への書き込みを許可する権限をマニフェストに追加したくないことに注意してください。これが、インテントを使用することの全体的なポイントです。

4

1 に答える 1

1

このコードを試してください

    String Streetname="ZZZZZ";
 ArrayList < ContentProviderOperation > ops = new ArrayList < ContentProviderOperation > ();
    ops.add(ContentProviderOperation.newInsert(
    ContactsContract.RawContacts.CONTENT_URI)
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
        .build());
   ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE,
        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
            .withValue(
        ContactsContract.CommonDataKinds.StructuredPostal.STREET,
        Streetname).build());

      try {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
                  Log.e(getApplicationContext().toString(), "Exception: " + e.getMessage());
    } 

マニフェストに追加

     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
     <uses-permission android:name="android.permission.READ_CONTACTS"/>

詳細はこの投稿を参照してください..

Androidで新しい連絡先を追加する方法

于 2013-01-04T09:12:24.243 に答える