Ich mache eine Android-App und muss die Kontaktliste des Telefons anrufen. Ich muss die Kontaktlistenfunktion aufrufen, einen Kontakt auswählen und dann mit dem Namen des Kontakts zu meiner App zurückkehren. Hier ist der Code, den ich im Internet bekommen habe, aber er funktioniert nicht.
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Contacts extends ListActivity {
private ListAdapter mAdapter;
public TextView pbContact;
public static String PBCONTACT;
public static final int ACTIVITY_EDIT=1;
private static final int ACTIVITY_CREATE=0;
// Called when the activity is first created.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
startManagingCursor(C);
String[] columns = new String[] {People.NAME};
int[] names = new int[] {R.id.row_entry};
mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
setListAdapter(mAdapter);
} // end onCreate()
// Called when contact is pressed
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor C = (Cursor) mAdapter.getItem(position);
PBCONTACT = C.getString(C.getColumnIndex(People.NAME));
// RHS 05/06
//pbContact = (TextView) findViewById(R.id.myContact);
//pbContact.setText(new StringBuilder().append("b"));
Intent i = new Intent(this, NoteEdit.class);
startActivityForResult(i, ACTIVITY_CREATE);
}
}
Antworten:
Ich bin nicht 100% sicher, was Ihr Beispielcode tun soll, aber das folgende Snippet soll Ihnen helfen, die Kontaktlistenfunktion aufzurufen, einen Kontakt auszuwählen und dann mit dem Namen des Kontakts zu [Ihrer] App zurückzukehren.
Dieser Prozess besteht aus drei Schritten.
1. Berechtigungen
Fügen Sie Ihrem Anwendungsmanifest eine Berechtigung zum Lesen von Kontaktdaten hinzu.
2. Rufen Sie die Kontaktauswahl an
Erstellen Sie in Ihrer Aktivität eine Absicht, die das System auffordert, eine Aktivität zu finden, die eine PICK-Aktion aus den Elementen in der Kontakt-URI ausführen kann.
Rufen Sie auf
startActivityForResult
und übergeben Sie diese Absicht (undPICK_CONTACT
in diesem Beispiel eine Anforderungscode-Ganzzahl ). Dies führt dazu, dass Android eine Aktivität startet, die für die UnterstützungACTION_PICK
von registriert ist,People.CONTENT_URI
und dann zu dieser Aktivität zurückkehrt, wenn die Auswahl getroffen (oder abgebrochen) wird.3. Auf das Ergebnis hören
Überschreiben Sie auch in Ihrer Aktivität die
onActivityResult
Methode zum Abhören der Rückgabe aus der in Schritt 2 gestarteten Aktivität "Kontakt auswählen". Sie sollten überprüfen, ob der zurückgegebene Anforderungscode mit dem erwarteten Wert übereinstimmt und der Ergebniscode lautetRESULT_OK
.Sie können den URI des ausgewählten Kontakts abrufen, indem Sie
getData()
den Parameter data Intent aufrufen . Um den Namen des ausgewählten Kontakts abzurufen, müssen Sie diesen URI verwenden, um eine neue Abfrage zu erstellen und den Namen aus dem zurückgegebenen Cursor zu extrahieren.Vollständiger Quellcode: tutorials-android.blogspot.com (wie man die Android-Kontaktliste aufruft) .
quelle
Ich mache es so für Android 2.2 Froyo Release: Verwenden Sie im Grunde Eclipse, um eine Klasse zu erstellen wie: öffentliche Klasse SomePickContactName erweitert Activity
Geben Sie dann diesen Code ein. Denken Sie daran, die privaten Klassenvariablen und CONSTANTS hinzuzufügen, auf die in meiner Version des Codes verwiesen wird:
quelle
Wenn Sie sich nach einer API Level 5-Lösung mit der ContactsContract-API umsehen, können Sie den obigen Code wie folgt leicht ändern:
Verwenden Sie dann in onActivityResult den Spaltennamen:
quelle
Hier ist das Code-Snippet, um Kontakt aufzunehmen:
}}
quelle
quelle
denn ohne Auswahl eines Kontakts gibt es eine Ausnahme. Überprüfen Sie diesen Zustand besser.
quelle
Der vollständige Code ist unten angegeben
quelle
private static final int PICK_CONTACT = 1;
.Zu meiner Überraschung benötigen Sie keine Benutzerberechtigung CONTACT_READ, um die Namen und einige grundlegende Informationen zu lesen (Ist der Kontakt markiert, was war die letzte Anrufzeit). Sie benötigen jedoch die Erlaubnis, um die Details des Kontakts wie die Telefonnummer zu lesen.
quelle
Seien Sie vorsichtig, wenn Sie mit der Android-Kontaktliste arbeiten.
Das Lesen der Kontaktliste in den oben genannten Methoden funktioniert auf den meisten Android-Geräten mit Ausnahme von HTC One und Sony Xperia. Es hat meine sechs Wochen verschwendet , um herauszufinden, was los ist!
Die meisten online verfügbaren Tutorials sind fast ähnlich - lesen Sie zuerst "ALLE" Kontakte und zeigen Sie sie dann
Listview
mit anArrayAdapter
. Dies ist keine speichereffiziente Lösung. Anstatt zuerst auf anderen Websites nach Lösungen zu suchen, schauen Sie unter developer.android.com nach. Wenn auf developer.android.com keine Lösung verfügbar ist, sollten Sie woanders suchen.Die Lösung besteht darin,
CursorAdapter
anstelle desArrayAdapter
Abrufs der Kontaktliste zu verwenden. Die VerwendungArrayAdapter
würde auf den meisten Geräten funktionieren, ist jedoch nicht effizient. DerCursorAdapter
ruft zur Laufzeit nur einen Teil der Kontaktliste ab, während dieListView
gescrollt wird.Abrufen einer Kontaktliste: Abrufen einer Kontaktliste
quelle
quelle
Hallo, ich habe einen Code, um den Kontakt in Ihrer Datenbank nach gemeinsamer Präferenz zu speichern. Hier ist mein Code
quelle
quelle
Ich verwende den von @Colin MacKenzie - III bereitgestellten Code . Vielen Dank!
Für jemanden, der nach einem Ersatz für "veraltete" ManagedQuery sucht:
1. unter der Annahme, dass v4 support lib verwendet wird:
2. Platz:
3.,
4. Rückrufe überschreiben:
5. Platz:
6. Der obige Code , außer dass ich den Signaturparameter von Absicht in Cursor ändere:
7. Rufen Sie initLoader auf:
8. Vergessen Sie diesen Code nicht
Verweise:
Android-Grundlagen: Daten richtig laden
Initialisieren eines Loaders in einer Aktivität
quelle