2012-11-28 11 views
8

Muszę obsługiwać system Android w wersji 2.1 lub nowszej.Jak dodać dane strukturalne do nowego kontaktu Intent

Google zamieścił przykład, jak korzystać z Kontakty Kontakty, ale niektóre z nich używały rzeczy, które są dostępne od poziomu 11 interfejsu API, więc muszę improwizować, ale utknąłem.

Więc pory mam to:

  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); 

Uwaga jak ja strukturyzowane NAME i POSTAL dodatki. Nie działa to na wszystkich urządzeniach, ponieważ niektóre książki adresowe mają oddzielone pola pierwszego i ostatniego nazwiska, a także pola miasta, stanu i zip. Moje "rozwiązanie" wygląda więc dość głupio: w polu imienia znajdują się zarówno imię, jak i nazwisko, a pole adresu ma pełny adres. Jak mogę to naprawić? Czy ktoś da mi przykład?

Dla przypomnienia, to nie działa:

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

Należy również pamiętać, że nie chcę, aby dodać pozwolenie na mój manifest, aby umożliwić pisanie do kontaktów. To jest cały sens używania intencji.

+0

Czy masz oddzielny kod dla wstawianie w Kontaktach dla API 11 i wyższych oraz API poziomu 11 i poniżej? –

Odpowiedz

1

Spróbuj ten kod to praca dla mnie

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()); 
    } 

dodatek manifestować

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

więcej szczegółów patrz ten post ..

How to add new contacts in android

Powiązane problemy