2010-09-08 16 views

risposta

10

Non esiste una trasmissione specifica per una chiamata persa, AFAIK.

è possibile guardare le trasmissioni per ACTION_PHONE_STATE_CHANGED, attendere che il telefono si sposta da EXTRA_STATE_RINGING a EXTRA_STATE_IDLE, quindi provare a controllare il provider di contenuti CallLog per vedere se la chiamata è stato mancato. Non ho provato questa tecnica, ma potrebbe funzionare.

+0

@ CommonsWare-Possiamo distinguere tra Missed Call e Call Rejected perché entrambi funzione il modo sopra menzionato !!! –

11

È necessario utilizzare un ContentObserver

public class MissedCallsContentObserver extends ContentObserver 
{ 
    public MissedCallsContentObserver() 
    { 
     super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange) 
    { 
     Cursor cursor = getContentResolver().query(
      Calls.CONTENT_URI, 
      null, 
      Calls.TYPE + " = ? AND " + Calls.NEW + " = ?", 
      new String[] { Integer.toString(Calls.MISSED_TYPE), "1" }, 
      Calls.DATE + " DESC "); 

     //this is the number of missed calls 
     //for your case you may need to track this number 
     //so that you can figure out when it changes 
     cursor.getCount(); 

     cursor.close(); 
    } 
} 

dalla tua app, è sufficiente fare questo:

MissedCallsContentObserver mcco = new MissedCallsContentObserver(); 
getApplicationContext().getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, mcco); 
+0

Ciao, vorrei sapere se hai intenzionalmente omesso 'cursor.close()'? Come non è necessario perché il 'ContentObserver' lo chiuderà automaticamente? – lock

+0

buona domanda. Non l'ho lasciato intenzionalmente, dovrebbe esserci. Aggiornerò la mia risposta – Joe

Problemi correlati