Inserimento di nuovi contatti Android nel telefono

Scrivo un'applicazione che consente all'utente di rimuovere i contatti dal proprio dispositivo Android e di archiviarli in un database separato. Dovrebbero anche essere in grado di ripristinare i contatti al proprio telefono, ma ho problemi con questa parte. Recupero le informazioni di contatto dal mio database e creo un object di contatto che contiene l'ID del contatto, la chiave di ricerca, il nome strutturato, l'organizzazione, un elenco di arrays degli oggetti del telefono (che contengono il numero e il tipo di telefono) ecc. È tutto lì. La mia function per ripristinare le informazioni al telefono è simile al seguente:

public void addContact(Contact contact) { ContentValues values = new ContentValues(); values.put("contact_id", contact.getContactId()); values.put("lookup", contact.getLookupKey()); values.put("mimetype", StructuredName.CONTENT_ITEM_TYPE); values.put("data1", contact.getStructuredName().getDisplayName()); values.put("data2", contact.getStructuredName().getGivenName()); values.put("data3", contact.getStructuredName().getFamilyName()); values.put("data4", contact.getStructuredName().getPrefix()); values.put("data5", contact.getStructuredName().getMiddleName()); values.put("data6", contact.getStructuredName().getSuffix()); context.getContentResolver().insert(Data.CONTENT_URI, values); } 

E, beh, è ​​qui che l'app si blocca. Ho usato questo metodo per inserire i dati nel mio database senza problemi, e posso verificare che sia memorizzato correttamente. Quindi la mia ipotesi è che ci sia un modo migliore di inserire i contatti nel dispositivo, ma non ho idea di come sarebbe. Qualcuno mi può dare un esempio di creazione e inserimento di un contatto nel dispositivo dell'utente? Sarei soddisfatto anche se potessi vedere un contatto con un solo nome visualizzato.

  • Carica un file con Android al servizio web Django
  • Riprendi l'attività anziché l'avvio se esiste già nella pila posteriore
  • Come caricare l'image da aws con picasso con accesso privato
  • onSaveInstanceState non sta salvando i miei valori (l'opzione OnCreate Il bundle è sempre nullo)
  • Posso fare apparire un button distriggersto e ascoltare ancora i clic?
  • Modalità rigorosa in android 2.2
  • Se è importnte, ho anche provato a mettere questo codice sopra l'inserimento del nome strutturato, ma senza alcun risultato:

     values.put("_id", contact.getContactId()); values.put("lookup", contact.getLookupKey()); values.put("display_name", contact.getStructuredName().getDisplayName()); context.getContentResolver().insert(Contacts.CONTENT_URI, values); values.clear(); 

    Modifica: Qui è il mio log di errore logcat quando l'applicazione si blocca:

     05-07 20:31:53.941: E/Trace(819): error opening trace file: No such file or directory (2) 05-07 20:34:39.035: D/AndroidRuntime(853): Shutting down VM 05-07 20:34:39.048: W/dalvikvm(853): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 05-07 20:34:39.197: E/AndroidRuntime(853): FATAL EXCEPTION: main 05-07 20:34:39.197: E/AndroidRuntime(853): java.lang.NullPointerException 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Parcel.readException(Parcel.java:1431) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentResolver.insert(ContentResolver.java:866) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.contacts.ContactHandler.addContact(ContactHandler.java:58) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.StartPage$12.onClick(StartPage.java:542) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Handler.dispatchMessage(Handler.java:99) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Looper.loop(Looper.java:137) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.app.ActivityThread.main(ActivityThread.java:5041) 05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invoke(Method.java:511) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 05-07 20:34:39.197: E/AndroidRuntime(853): at dalvik.system.NativeStart.main(Native Method) 

    2 Solutions collect form web for “Inserimento di nuovi contatti Android nel telefono”

    Riferimento

     ContentValues values = new ContentValues(); values.put(Data.RAW_CONTACT_ID, 001); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "1-800-GOOG-411"); values.put(Phone.TYPE, Phone.TYPE_CUSTOM); values.put(Phone.LABEL, "Nirav"); Uri dataUri = getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); 

    Utilizza il codice riportto sopra. http://developer.android.com/reference/android/provider/ContactsContract.Data.html

     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) .withValue(Data.RAW_CONTACT_ID, rawContactId) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, "1-800-GOOG-411") .withValue(Phone.TYPE, Phone.TYPE_CUSTOM) .withValue(Phone.LABEL, "free directory assistance") .build()); getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.