Saya membuat aplikasi Android, dan perlu menghubungi daftar kontak ponsel. Saya perlu memanggil fungsi daftar kontak, memilih kontak, lalu kembali ke aplikasi saya dengan nama kontak. Berikut kode yang saya dapat di internet, tetapi tidak berhasil.
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);
}
}
Jawaban:
Saya tidak 100% yakin apa yang seharusnya dilakukan kode sampel Anda, tetapi cuplikan berikut akan membantu Anda 'memanggil fungsi daftar kontak, memilih kontak, lalu kembali ke aplikasi [Anda] dengan nama kontak'.
Ada tiga langkah untuk proses ini.
1. Izin
Tambahkan izin untuk membaca data kontak ke manifes aplikasi Anda.
2. Memanggil Pemilih Kontak
Di dalam Aktivitas Anda, buat Intent yang meminta sistem untuk menemukan Kegiatan yang dapat melakukan aksi PICK dari item di URI Kontak.
Panggil
startActivityForResult
, lewat Intent ini (dan integer kode permintaan,PICK_CONTACT
dalam contoh ini). Hal ini akan menyebabkan Android untuk meluncurkan sebuah Kegiatan yang terdaftar untuk dukunganACTION_PICK
padaPeople.CONTENT_URI
, kemudian kembali ke Kegiatan ini ketika pemilihan dibuat (atau dibatalkan).3. Mendengarkan Hasilnya
Juga di Aktivitas Anda, ganti
onActivityResult
metode untuk mendengarkan pengembalian dari Aktivitas 'pilih kontak' yang Anda luncurkan pada langkah 2. Anda harus memeriksa bahwa kode permintaan yang dikembalikan sesuai dengan nilai yang Anda harapkan, dan bahwa kode hasilnyaRESULT_OK
.Anda bisa mendapatkan URI dari kontak yang dipilih dengan menelepon
getData()
pada data yang parameter Intent. Untuk mendapatkan nama kontak yang dipilih, Anda perlu menggunakan URI itu untuk membuat kueri baru dan mengekstrak nama dari kursor yang dikembalikan.Kode sumber lengkap: tutorials-android.blogspot.com (cara memanggil daftar kontak android) .
sumber
Saya melakukannya dengan cara ini untuk rilis Android 2.2 Froyo: pada dasarnya gunakan gerhana untuk membuat kelas seperti: public class SomePickContactName memperluas Activity
lalu masukkan kode ini. Ingatlah untuk menambahkan variabel kelas privat dan CONSTANTS yang dirujuk dalam versi kode saya:
sumber
Mencari-cari solusi API Level 5 menggunakan API ContactsContract Anda bisa sedikit memodifikasi kode di atas dengan yang berikut:
Dan kemudian di onActivityResult gunakan nama kolom:
sumber
Berikut ini cuplikan kode untuk mendapatkan kontak:
}
sumber
sumber
karena tanpa memilih kontak apa pun itu akan memberikan pengecualian. jadi lebih baik untuk memeriksa kondisi ini.
sumber
Kode lengkap diberikan di bawah ini
sumber
private static final int PICK_CONTACT = 1;
.Yang mengejutkan saya, Anda tidak memerlukan izin pengguna CONTACT_READ untuk membaca nama dan beberapa informasi dasar (Apakah kontak itu dibintangi, apa waktu panggilan terakhir). Namun Anda perlu izin untuk membaca detail kontak seperti nomor telepon.
sumber
Hati-hati saat bekerja dengan daftar kontak android.
Membaca daftar kontak dalam metode di atas berfungsi pada sebagian besar perangkat Android kecuali HTC One dan Sony Xperia. Membuang enam minggu saya untuk mencari tahu apa yang salah!
Sebagian besar tutorial yang tersedia secara online hampir mirip - pertama baca kontak "SEMUA", kemudian tunjukkan
Listview
denganArrayAdapter
. Ini bukan solusi yang efisien memori. Alih-alih mencari solusi di situs web lain terlebih dahulu, kunjungi developer.android.com. Jika solusi apa pun tidak tersedia di developer.android.com, Anda harus mencari di tempat lain.Solusinya adalah menggunakan
CursorAdapter
alih-alihArrayAdapter
untuk mengambil daftar kontak. MenggunakanArrayAdapter
akan berfungsi pada sebagian besar perangkat, tetapi itu tidak efisien. HanyaCursorAdapter
mengambil sebagian dari daftar kontak pada saat run time ketikaListView
sedang digulir.Mengambil Daftar Kontak: Mengambil Daftar Kontak
sumber
sumber
hai saya punya kode untuk menyimpan kontak di database Anda dengan preferensi bersama di sini adalah kode saya
sumber
sumber
Saya menggunakan kode yang disediakan oleh @Colin MacKenzie - III. Terima kasih banyak!
Untuk seseorang yang mencari pengganti dariQuery yang 'usang' dikelola:
1st, dengan asumsi menggunakan lib dukungan v4:
2:
Ke-3,
4, timpa panggilan balik:
5:
6, kode di atas , kecuali bahwa saya mengubah param tanda tangan dari Intent ke Cursor:
7, panggil initLoader:
8, jangan lupa bagian kode ini
Referensi:
Android Fundamentals: Memuat Data dengan Benar
Menginisialisasi Loader dalam Aktivitas
sumber