2011-10-01 14 views
5

Deseo obtener el recuento de llamadas perdidas y mensajes no leídos en mi aplicación. y me gustaría abrir la aplicación correspondiente cuando el usuario hace clic en el recuento.Cómo recibir el número de llamadas y SMS perdidos

Ahora el mayor problema es cómo obtener el conteo?

Busqué en línea pero no encontré ninguna solución.

Gracias de antemano.

Respuesta

22

http://developer.android.com/reference/android/provider/CallLog.Calls.html

Tome un vistazo a esta clase CallLog. Todo lo que necesita es consultar el teléfono para cualquier llamada y luego extraer la perdida (o hacer esto cuando está consultando el teléfono, en los argumentos de selección). Lo mismo aplica para los mensajes. Los SMS se almacenan en el proveedor de contenido bajo "content://sms/"

Luego solo obtenga el recuento de filas en el Cursor que devuelve la consulta. :)

Espero que esto ayude.

Editar: Para las llamadas perdidas:

String[] projection = { CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.TYPE }; 
     String where = CallLog.Calls.TYPE+"="+CallLog.Calls.MISSED_TYPE;   
     Cursor c = this.getContentResolver().query(CallLog.Calls.CONTENT_URI, selection,where, null, null); 
     c.moveToFirst();  
     Log.d("CALL", ""+c.getCount()); //do some other operation 
     if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc 

En la cláusula donde se establece la condición para la selección de datos. En nuestro caso, necesitamos todo lo que tipo es CallLog.Calls.MISSED_TYPE. Seleccionamos el proyecto el nombre de la persona que llama y su número, por supuesto puede especificar más información para ser consultada como tipo de número como móvil, casa, trabajo. La expresión es equivalente a la consulta SQL, algo así como: SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE

Esto requiere permisos que se añade a la Manifiesto

<uses-permission android:name="android.permission.READ_LOGS"></uses-permission> 
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 

Para consultar SMS ContentProvider:

Uri sms_content = Uri.parse("content://sms"); 
Cursor c = this.getContentResolver().query(sms_content, null,null, null, null); 
c.moveToFirst(); 
Log.d("SMS COUNT", ""+c.getCount()); //do some other operation 
//Here proceed with the what you wanted 
if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc 

se puede ir más profundo en el árbol de contenido como especificar el tipo de sms, como: content://sms/sent o content://sms/inbox y agregar proyección y selección para el segundo argumento del query() método como, nombre, persona, estado del mensaje (como el ejemplo de llamadas).

Esto requiere permiso:

<uses-permission android:name="android.permission.READ_SMS"></uses-permission> 
+0

Gracias por la respuesta. ¿Me puede indicar algún tutorial? Apenas puedo entender la documentación porque soy un NooB real :( –

+2

@MayuMayooresan Les proporcioné el ejemplo que escribí para ustedes. Espero que mi breve explicación sea lo suficientemente clara. Buena suerte. –

+1

muchas gracias :) u rock :) –

0

Como no tengo la reputación suficiente para responder a la pregunta @Prasad comentario sobre

ERROR -> getContentResolver() está definido para el tipo nuevo Ejecutable() {}

getContentResolver() es parte del contexto de aplicación, por lo que si usted está usando un contexto de uso BroadcastReceiver en OnReceive() función como esta

@Override 
    public void onReceive(Context context, Intent intent) { 

    context.getContentResolver() 
} 

si está utilizando el código anterior dentro de una actividad, entonces se puede utilizar

getApplicationContext().getContentResolver() 

También asegúrese de usar [Ctrl + Shift + O (O no es cero)] para organizar las importaciones

Key Shortcut for Eclipse Imports

espero que esto le ayudará y ayudar a otra persona, y espero que más que esto no es en contra de nuestra norma comunitaria.

Cuestiones relacionadas