solo - ¿Cómo llamar a la lista de contactos de Android Y seleccionar un número de teléfono de su pantalla de detalles?
como poner un contacto en la pantalla de inicio samsung j7 prime (5)
Few, me tomó algo de tiempo, pero creo que tengo la respuesta que necesitas (aunque ya sea demasiado tarde, pero la publicaré como una referencia para otros).
en la aplicación que estoy desarrollando actualmente, el usuario puede ingresar un número de teléfono en un texto de EditText
o hacer clic en un botón y seleccionar una persona de la libreta de direcciones del teléfono. Si la persona tiene más de un número de teléfono, hay una lista desplegable donde puede seleccionar exactamente uno de ellos.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_picker);
// this opens the activity. note the Intent.ACTION_GET_CONTENT
// and the intent.setType
((Button)findViewById(R.id.pick_person)).setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// user BoD suggests using Intent.ACTION_PICK instead of .ACTION_GET_CONTENT to avoid the chooser
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// BoD con''t: CONTENT_TYPE instead of CONTENT_ITEM_TYPE
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, 1);
}
});
}
ahora, tan pronto como el usuario selecciona un contacto (y probablemente elige uno de varios números de teléfono), puede recuperar los datos de la forma habitual:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
Uri uri = data.getData();
if (uri != null) {
Cursor c = null;
try {
c = getContentResolver().query(uri, new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE },
null, null, null);
if (c != null && c.moveToFirst()) {
String number = c.getString(0);
int type = c.getInt(1);
showSelectedNumber(type, number);
}
} finally {
if (c != null) {
c.close();
}
}
}
}
}
public void showSelectedNumber(int type, String number) {
Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();
}
Aquí está la documentación para CommonDataKinds.Phone para en dev.android .
el "tipo" de int le indica el tipo de número: móvil (2), casa (1), trabajo (3), etc.
nota: después de que el usuario selecciona el contacto, obtiene un número de números que no indica el tipo de números. no es realmente fácil de usar: si un contacto tiene 5 números asignados ... ¿cuál de estos es el número de fax nuevamente?
otra nota: el ejemplo anterior necesita el sdk> 5 (Android 2.0+), así que no 1.6 (= sdk 4). 1.6 tiene una API diferente, y si quieres admitir ambas versiones, lee el artículo sobre la API de contactos en dev.android .
buena suerte.
descargo de responsabilidad: copié la mayor parte de mi código del ejemplo PickContact.java
He leído las soluciones ya publicadas, pero no me dicen cómo usar la pantalla de detalles de contacto del sistema para seleccionar UN número para usar. Estoy desarrollando una aplicación para Android de envío de SMS que ofrece elegir los contactos del teléfono y el número que un usuario desea usar para enviar a ...
Hasta ahora no he podido encontrar nada sobre la elección de un número. ¿Solo tiene que hacerse programáticamente? ¿Recuperando todos los números de la base de datos y enviándoles sms?
Saludos
Jerez
Hay un problema en la respuesta aceptada. Si el número seleccionado contiene espacios dentro de él.
es decir, 85 29 948789, entonces solo mostrará 85 (hasta el primer espacio).
así que usa el siguiente código para corregir este problema :)
Intent intent1 = new Intent(Intent.ACTION_PICK);
intent1.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent1, 1);
y en onActivityResult
Uri contactUri = data.getData();
String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
Cursor cursor = getContentResolver()
.query(contactUri, projection, null, null, null);
cursor.moveToFirst();
int numberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int nameColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
String number = cursor.getString(numberColumn);
String name = cursor.getString(nameColumn);
PRUEBA ESTO
setContentView(R.layout.main);
contactNumber = (TextView)findViewById(R.id.contactnumber);
Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
buttonPickContact.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, 1);
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RQS_PICK_CONTACT){
if(resultCode == RESULT_OK){
Uri contactData = data.getData();
Cursor cursor = managedQuery(contactData, null, null, null, null);
cursor.moveToFirst();
String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
//contactName.setText(name);
contactNumber.setText(number);
//contactEmail.setText(email);
}
}
}
}
EDITAR XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/pickcontact"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pick Contact" />
<TextView
android:id="@+id/contactnumber"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Prueba este código, estoy seguro de que funcionará
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, PICK_CONTACT);
este código solo funciona bien conmigo
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
super.startActivityForResult(i, 1001);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1001:
if (resultCode == Activity.RESULT_OK) {
Cursor s = getContentResolver().query(Phone.CONTENT_URI, null,
null, null, null);
if (s.moveToFirst()) {
String phoneNum = s.getString(s.getColumnIndex(Phone.NUMBER));
Toast.makeText(getBaseContext(), phoneNum, Toast.LENGTH_LONG).show();
}
}
break;
}
}