2012-04-05 11 views
7

È possibile utilizzare il telefono degli utenti tramite il proprio provider di telefoni cellulari e tenere traccia della durata di una telefonata?Traccia una durata della telefonata

Quindi l'utente preme un pulsante nell'app "Chiama ora". Una chiamata inizia con un numero predeterminato. Registriamo l'ora di inizio. Al termine della chiamata, calcoliamo quanti minuti sono stati utilizzati.

Possibile?

+0

Se iniziano e terminano la chiamata nella tua app, non puoi semplicemente controllare l'ora corrente prima e dopo la chiamata? –

+0

Questo è quello che sto cercando di capire. Le piattaforme iOS e Android mi consentono di rilevare quando una chiamata è terminata? – spentak

+0

È possibile ottenere i registri delle chiamate su Android e iOS, oppure se si è interessati solo alle chiamate effettuate dall'app durante la descrizione, è possibile controllare l'ora del sistema. –

risposta

9

Per calcolare il tempo ha parlato per entrambi, le chiamate in uscita in entrata utilizzare il seguente ricevitore trasmissione:

public class CallDurationReceiver extends BroadcastReceiver { 

    static boolean flag = false; 
    static long start_time, end_time; 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equalsIgnoreCase("android.intent.action.PHONE_STATE")) { 
      if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
      TelephonyManager.EXTRA_STATE_RINGING)) { 
       start_time = System.currentTimeMillis(); 
      } 
      if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
      TelephonyManager.EXTRA_STATE_IDLE)) { 
       end_time = System.currentTimeMillis(); 
       //Total time talked = 
       long total_time = end_time - start_time; 
       //Store total_time somewhere or pass it to an Activity using intent 
      } 
     } 
    } 

registro il ricevitore nel file manifest in questo modo:

<receiver android:name=".CallDurationReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

aggiungere anche il permesso usi:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+9

Tuttavia, calcolando la durata come questa includerà il tempo di raccolta, risultante in una stima per eccesso della durata reale. Sto cercando una soluzione anche a questo, e sembra che il registro delle chiamate sia l'unico posto in cui puoi trovare le informazioni precise sulla durata. –

+1

@Akhil Non so se questo fornirà risultati accurati perché TelephonyManager.EXTRA_STATE_RINGING è il punto in cui ottieni l'ora di inizio e questo significa automaticamente che anche una chiamata persa avrà una durata. Avrei pensato che "CALL_STATE_OFFHOOK" è il luogo appropriato per iniziare la durata della registrazione – Zidane

+0

questo non può funzionare per le chiamate in uscita –

0

Questo potrebbe essere troppo tardi, ma solo per chi potrebbe ed esso in futuro. Per le chiamate in uscita, è possibile leggere la durata dal CallLog. Per le chiamate in arrivo, è possibile calcolare la durata in base agli orari di inizio e di fine della chiamata.

Problemi correlati