2010-09-24 8 views
7

dans mon application, je devrais faire une action lorsqu'un appel vient mais pas répondu par l'utilisateur.Comment faire pour récupérer des appels manqués sur Android SDK 2.2

J'ai cherché dans le android.telephony et la NotificationManager, mais je ne l'ai pas trouvé une méthode pour résoudre ce problème. Est-ce que quelqu'un a une idée de la façon de savoir s'il y a un appel manqué au téléphone ou non?

Répondre

14

Voici un code qui peut interroger le journal des appels pour un appel manqué. Fondamentalement, vous devrez déclencher cela en quelque sorte et assurez-vous de donner au journal d'appels un certain temps (quelques secondes devraient le faire) pour écrire les informations sinon si vous consultez le journal des appels trop tôt, vous ne trouverez pas l'appel le plus récent.

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(); 
} 

J'espère que vous trouverez cela utile.

+0

Comment MISSED_CALL_TYPE est-il déclaré? – erdomester

+3

MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE; - Désolé d'avoir quitté cette partie. –

+0

Merci! Je ne pouvais pas l'utiliser alors j'ai découvert qu'il y a 2 façons pour ces types d'appels: 1. le déclarer comme un entier: int typeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE) ;, puis int callType = c.getInt (typeColumn); et après tout, par ex. si calltype == 1 alors .....2: utilisez int outgoingtypeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE + "= '2'"); etc. J'espère que cela aide les autres! – erdomester

0

D'après ce que je comprends, vous avez besoin d'interroger le fournisseur CallLog (ou peut-être CallLog.Calls), et cette page explique comment interroger le fournisseur de contenu: http://developer.android.com/guide/topics/providers/content-providers.html#basics

Je serais heureux de voir le code si vous peut faire ce travail!

+0

Oui. Mais dans ce cas, je ne serai pas en mesure de savoir si l'appel manqué est répondu ou non. Dans mon application, si le téléphone manqué a reçu une réponse, je ne devrais pas informer à nouveau l'utilisateur de l'appel manqué. – Mathieu

+1

Comment répondre à un appel manqué? Il y a une constante MISSING_TYPE dans la classe CallLog.Calls, je crois qu'un appel est MISSING_TYPE, INCOMING_TYPE ou OUTGOING_TYPE –

+0

Oui. Je suis désolé de ne pas avoir exprimé clairement ce que je veux. Je suis d'accord avec vous pour dire qu '«un appel manqué» ne peut pas être répondu lorsque le téléphone sonne. Mais nous pouvons rappeler quand nous savons qu'il y a un appel manqué après, et c'est ce que je veux dire «répondre» à ma question. Donc, de cette façon, je pense qu'il est préférable d'utiliser une notification autre que la lecture des informations dans le calllog. J'espère que je suis plus clair cette fois. – Mathieu

0

Je suppose que vous avez des fournisseurs de contenu pour accéder aux journaux d'appels.

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

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

Si ce code fonctionne suffit pour exécuter cette requête au bon moment. Je veux dire vérifier quelques échantillons qui peuvent vous avertisse lorsque vous recevez un appel dans votre appareil

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

Une fois que vous obtenez cette notification a mis une minuterie ou d'utiliser certains ont été construits en Intentions pour trouver que le téléphone est de retour à l'état normal et accéder aux journaux d'appels ...

possible en double

broadcast receiver for missed call in android

Show Toast on Missed Call in android application

Questions connexes