Estoy creando una aplicación de Android y necesito llamar a la lista de contactos del teléfono. Necesito llamar a la función de lista de contactos, elegir un contacto y luego volver a mi aplicación con el nombre del contacto. Aquí está el código que obtuve en Internet, pero no funciona.
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);
}
}
Respuestas:
No estoy 100% seguro de lo que se supone que debe hacer su código de muestra, pero el siguiente fragmento debería ayudarlo a 'llamar a la función de lista de contactos, elegir un contacto y luego regresar a [su] aplicación con el nombre del contacto'.
Hay tres pasos para este proceso.
1. Permisos
Agregue un permiso para leer datos de contactos al manifiesto de su aplicación.
2. Llamar al selector de contactos
Dentro de su Actividad, cree una Intención que le pida al sistema que encuentre una Actividad que pueda realizar una acción PICK de los elementos en el URI de Contactos.
Llamada
startActivityForResult
, pasando este Intento (y un entero de código de solicitud,PICK_CONTACT
en este ejemplo). Esto hará que Android inicie una Actividad que esté registrada para admitirACTION_PICK
en elPeople.CONTENT_URI
, y luego regrese a esta Actividad cuando se haga (o cancele) la selección.3. Escuchando el resultado
También en su Actividad, anule el
onActivityResult
método para escuchar el retorno de la Actividad 'seleccionar un contacto' que inició en el paso 2. Debe verificar que el código de solicitud devuelto coincida con el valor que espera y que el código de resultado seaRESULT_OK
.Puede obtener el URI del contacto seleccionado llamando
getData()
al parámetro Intento de datos . Para obtener el nombre del contacto seleccionado, debe usar ese URI para crear una nueva consulta y extraer el nombre del cursor devuelto.Código fuente completo: tutorials-android.blogspot.com (cómo llamar a la lista de contactos de Android) .
fuente
Lo hago de esta manera para la versión Android 2.2 Froyo: básicamente uso eclipse para crear una clase como: clase pública SomePickContactName extiende la actividad
luego inserte este código. Recuerde agregar las variables de clase privada y CONSTANTES a los que se hace referencia en mi versión del código:
fuente
Si busca una solución API de nivel 5 con la API ContactsContract, puede modificar ligeramente el código anterior con lo siguiente:
Y luego en onActivityResult use el nombre de la columna:
fuente
Aquí está el fragmento de código para obtener contacto:
}
fuente
fuente
porque sin seleccionar ningún contacto dará una excepción. así que mejor verificar esta condición.
fuente
El código completo se da a continuación.
fuente
private static final int PICK_CONTACT = 1;
.Para mi sorpresa, no necesita el permiso de usuario CONTACT_READ para leer los nombres y alguna información básica (¿Fue el contacto destacado, cuál fue la última vez que llamó?) Sin embargo, necesita permiso para leer los detalles del contacto como el número de teléfono.
fuente
Tenga cuidado al trabajar con la lista de contactos de Android.
La lectura de la lista de contactos en los métodos anteriores funciona en la mayoría de los dispositivos Android, excepto HTC One y Sony Xperia. Perdí mis seis semanas tratando de descubrir qué está mal!
La mayoría de los tutoriales disponibles en línea son casi similares: primero lea "TODOS" los contactos, luego muéstrese
Listview
conArrayAdapter
. Esta no es una solución eficiente en memoria. En lugar de buscar soluciones en otros sitios web primero, eche un vistazo a developer.android.com. Si alguna solución no está disponible en developer.android.com, debería buscar en otro lugar.La solución es usar en
CursorAdapter
lugar deArrayAdapter
recuperar la lista de contactos. El usoArrayAdapter
funcionaría en la mayoría de los dispositivos, pero no es eficiente. LasCursorAdapter
recupera sólo una parte de la lista de contactos en tiempo de ejecución mientras elListView
se está desplazando.Recuperando una lista de contactos: Recuperando una lista de contactos
fuente
fuente
hola tengo un código para guardar el contacto en su base de datos por preferencia compartida aquí está mi código
fuente
fuente
Yo uso el codigo proporcionado por @Colin MacKenzie - III. ¡Muchas gracias!
Para alguien que está buscando un reemplazo de'QuiteRed 'obsoleto':
Primero, suponiendo que use v4 support lib:
2do:
3ro
4º, anular devoluciones de llamada:
5to:
6º, el código anterior , excepto que cambio el parámetro de firma de Intent a Cursor:
7º, llame a initLoader:
8º, no olvides este fragmento de código
Referencias
Fundamentos de Android: cargar datos correctamente
Inicializando un cargador en una actividad
fuente