2010-09-24 3 views
7

nella mia app, dovrei fare qualche azione quando arriva una chiamata ma non viene data risposta all'utente.Come recuperare le chiamate perse su Android SDK 2.2

Ho cercato nel android.telephony e la NotificationManager, ma non ho trovato un metodo per risolvere questo problema.

Qualcuno ha un'idea di come sapere se c'è una chiamata persa al telefono o no?

risposta

14

Ecco un codice che può interrogare il registro delle chiamate per una chiamata persa. Fondamentalmente, dovrai attivarlo in qualche modo e assicurarti di fornire il registro delle chiamate un po 'di tempo (alcuni secondi dovrebbero farlo) per scrivere le informazioni altrimenti se controlli il registro delle chiamate troppo presto non troverai la chiamata più recente.

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

Spero che questo sia utile.

+0

Come viene dichiarato MISSED_CALL_TYPE? – erdomester

+3

MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE; - Scusa per aver lasciato quella parte. –

+0

Grazie! Non potevo usarlo, quindi ho scoperto che esistono due modi per questi tipi di chiamata: 1. dichiararlo come intero: int typeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE) ;, quindi int callType = c.getInt (typeColumn); e dopo tutto, per es. se calltype == 1 allora .....2: use int outgoingtypeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE + "= '2'"); ecc. Spero che questo aiuti gli altri! – erdomester

0

Da quello che ho capito, è necessario interrogare il CallLog fornitore (o forse CallLog.Calls), e questa pagina spiega come eseguire una query content provider: http://developer.android.com/guide/topics/providers/content-providers.html#basics

Sarei felice di vedere il codice se si può fare questo lavoro!

+0

Sì. Ma in quel caso, non sarò in grado di sapere se la chiamata persa è o meno risposta. Nella mia app, se il telefono mancante ha ricevuto una risposta, non devo avvisare l'utente della chiamata persa. – Mathieu

+1

Come si può rispondere a una chiamata persa? Esiste una costante MISSING_TYPE nella classe CallLog.Calls, credo che una chiamata sia di MISSING_TYPE, INCOMING_TYPE o OUTGOING_TYPE –

+0

Sì. Mi dispiace di non aver espresso ciò che voglio chiaramente. Sono d'accordo con te sul fatto che "una chiamata persa" non può ricevere risposta quando il telefono sta "squillando". Ma possiamo richiamare quando sappiamo che c'è una chiamata persa dopo, e questo è ciò che intendo "risposta" nella mia domanda. Quindi, in questo modo, penso che sia meglio usare una notifica diversa dalla lettura delle informazioni nel registro chiamate. Spero di essere più chiaro questa volta. – Mathieu

0

Suppongo che tu abbia provider di contenuti per accedere ai registri delle chiamate.

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

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

Se questo codice funziona è sufficiente eseguire questa query al momento giusto. Voglio dire controllare alcuni campioni che possono notifica quando si riceve una chiamata nel dispositivo

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

volta che si ottiene questa notifica messo un timer o utilizzare alcuni costruita nel Intenti per scoprire che il telefono è tornato allo stato normale e accedere ai registri delle chiamate ...

Eventuali duplicati

broadcast receiver for missed call in android

Show Toast on Missed Call in android application