2010-09-24 7 views
7

en mi aplicación Debo hacer algo cuando llega una llamada pero el usuario no responde.Cómo recuperar llamadas perdidas en Android SDK 2.2

He buscado en el android.telephony y la NotificationManager, pero no he encontrado un método para resolver este problema.

¿Alguien tiene una idea de cómo saber si hay una llamada perdida en el teléfono o no?

Respuesta

14

Aquí hay un código que puede consultar el registro de llamadas para una llamada perdida. Básicamente, tendrá que desencadenar esto de alguna manera y asegúrese de dar el registro de llamadas en algún momento (unos pocos segundos deberían hacerlo) para escribir la información; de lo contrario, si revisa el registro de llamadas demasiado pronto, no encontrará la llamada más reciente.

final String[] projection = null; 
final String selection = null; 
final String[] selectionArgs = null; 
final String sortOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
Cursor cursor = null; 
try{ 
    cursor = context.getContentResolver().query(
      Uri.parse("content://call_log/calls"), 
      projection, 
      selection, 
      selectionArgs, 
      sortOrder); 
    while (cursor.moveToNext()) { 
     String callLogID = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls._ID)); 
     String callNumber = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 
     String callDate = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.DATE)); 
     String callType = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.TYPE)); 
     String isCallNew = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NEW)); 
     if(Integer.parseInt(callType) == MISSED_CALL_TYPE && Integer.parseInt(isCallNew) > 0){ 
      if (_debug) Log.v("Missed Call Found: " + callNumber); 
     } 
    } 
}catch(Exception ex){ 
    if (_debug) Log.e("ERROR: " + ex.toString()); 
}finally{ 
    cursor.close(); 
} 

Espero que le sea útil.

+0

¿Cómo se declara MISSED_CALL_TYPE? – erdomester

+3

MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE; - Perdón por dejar esa parte. –

+0

Gracias! No pude usarlo entonces descubrí que hay 2 formas para estos tipos de llamadas: 1. declararlo como un entero: int typeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE) ;, int callType = c.getInt (typeColumn); y después de todo, p. si calltype == 1 entonces .....2: use int exitgoingtypeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE + "= '2'"); etc. Espero que esto ayude a otros! – erdomester

0

Por lo que entiendo, es necesario consultar al proveedor CallLog (o tal vez CallLog.Calls), y esta página se explica cómo consultar proveedor de contenido: http://developer.android.com/guide/topics/providers/content-providers.html#basics

que estaría feliz de ver el código si puede hacer que esto funcione!

+0

Sí. Pero en ese caso, no podré saber si la llamada perdida es respondida o no. En mi aplicación, si se ha respondido el teléfono perdido, no debería volver a notificar al usuario sobre la llamada perdida. – Mathieu

+1

¿Cómo se puede responder una llamada perdida? Hay una constante MISSING_TYPE en la clase CallLog.Calls, creo que una llamada es MISSING_TYPE, INCOMING_TYPE o OUTGOING_TYPE –

+0

Sí. Lamento no haber expresado claramente lo que quiero. Estoy de acuerdo con usted en que "una llamada perdida" no se puede responder cuando el teléfono está "sonando". Pero podemos devolver la llamada cuando sabemos que hay una llamada perdida después, y esto es lo que quiero decir "respuesta" en mi pregunta. Entonces, de esta manera, creo que es mejor usar una notificación que no sea leer la información en el registro de llamadas. Espero estar más claro esta vez. – Mathieu

0

Supongo que tiene proveedores de contenido para acceder a los registros de llamadas.

http://www.anddev.org/video-tut_-_querying_and_displaying_the_calllog-t169.html

http://www.devx.com/wireless/Article/41133

Si este código funciona sólo tiene que ejecutar esta consulta en el momento adecuado. Me refiero a verificar algunas muestras que se le notifique cuando recibe una llamada en su dispositivo

http://groups.google.com/group/android-developers/browse_thread/thread/d97a759a3708cbe3

Una vez que esta notificación poner un temporizador o utilizar algunas de ellas construidas en intentos de encontrar que el teléfono ha vuelto a su estado normal y acceder a los registros de llamadas ...

posible duplicado

broadcast receiver for missed call in android

Show Toast on Missed Call in android application

Cuestiones relacionadas