2010-12-08 20 views
8

Android'de getContentResolver kullanarak kişiyi eklemeye çalışıyorum. Önce bir ArrayList oluşturuldu:İletişim API'sını görünmez bir kişi olarak saklayan iletişim API'sı: Nasıl görünür hale getirilir?

int rawContactInsertIndex = ops.size(); 

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,accountName) 
    .build()); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex) 
    .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name) 
    .build()); 

tarafından ve son olarak bir try bloğunda doldurulur sonra dizi listesi

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

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

Bunu excecute zaman, ben herhangi almıyorum hata veya istisna. Ancak kişi Android kişilerde görünmüyor. Görünmez kişileri aldığımda bu kişiyi bulabilirdim. Birisi neyin yanlış gittiğini anlayabilir mi?

+1

Muhtemelen aptalca bir soru ama telefon ayarında sadece sayılarla görülebilir hale getiriyorsunuz. – Terrance

+1

Eklemek istediğim başka bir şey, bazı telefonların yalnızca belirli Google gruplarına ait kişileri (hangisini ayarlarsanız) göstermeyi seçmenize izin vermesidir. Yeni bir kişi bu gruplardan birinin parçası değilse, onu görmeyeceksiniz. GMail hesabınızı kontrol edin ve kartvizite doğru şekilde senkronize edilmiş olup olmadığını kontrol edin. –

+0

@Terrance: Cevabın farkında olup olmadığını öğrenebilir miyim? Bu kişileri almak istiyorsanız, ben sadece görünmez bayrak kullanabiliyorsan ... iletişimde görünür hale getirmek ile ilgisi yoktur. – Ads

cevap

9
ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
     //.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT) 
     .build()); 

    // first and last names 
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(StructuredName.GIVEN_NAME, name) 
     .withValue(StructuredName.FAMILY_NAME, name) 
     .build()); 

op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone) 
     .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_MOBILE) 
     .build()); 

    op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Email.DATA, email) 
     .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK) 
     .build()); 

try{ 
    ContentProviderResult[] results = getContentResolver(). 
           applyBatch(ContactsContract.AUTHORITY, op_list); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

Bu kod çalışır!

+0

bu işe yaramıyor. Bir hesap türü olarak null ve isim bazı telefonlarda çalışmıyor. – Creniale

+0

@Creniale başka bir çözüm ??? Buradan gönderim yararlı olacaktır – Ads

+0

Çözümler için teşekkürler – blessenm