2012-11-28 13 views
8

Tôi cần hỗ trợ Android 2.1 trở lên.Cách thêm dữ liệu có cấu trúc vào liên hệ mới Intent

Google đã đăng một ví dụ về cách sử dụng ContactContract, nhưng một số đã sử dụng những thứ có sẵn bắt đầu với API cấp 11, vì vậy tôi cần phải ứng biến, nhưng tôi bị kẹt.

Vì vậy, đến nay tôi có điều này:

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

Lưu ý làm thế nào tôi đã có cấu trúc các NAMEPOSTAL extras. Điều này không hoạt động trên tất cả các thiết bị, mặc dù một số sổ địa chỉ có các trường tên đầu tiên và cuối cùng được phân tách cũng như các trường thành phố, tiểu bang và zip. Vì vậy, "giải pháp" của tôi trông khá ngu ngốc: trường tên đầu tiên có cả tên và họ, và trường địa chỉ đường phố có địa chỉ đầy đủ. Làm thế nào tôi có thể sửa lỗi này? Ai đó sẽ cho tôi một ví dụ?

Đối với hồ sơ, điều này không làm việc:

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

Ngoài ra, lưu ý rằng tôi không muốn thêm một sự cho phép trong manifest của tôi để cho phép bằng văn bản cho địa chỉ liên lạc. Đó là toàn bộ quan điểm của việc sử dụng Intent.

+0

Bạn có mã riêng biệt cho chèn trong Danh bạ cho API 11 trở lên và API cấp 11 trở xuống? –

Trả lời

1

Hãy thử mã này nó làm việc cho tôi

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

add để biểu lộ nhiều

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

chi tiết xem bài đăng này ..

How to add new contacts in android