2012-04-05 11 views
7

¿Es posible utilizar el teléfono de los usuarios a través de su proveedor de telefonía móvil y hacer un seguimiento de la duración de una llamada telefónica?Realizar un seguimiento de la duración de una llamada telefónica

Por lo que el usuario presiona un botón en la aplicación "Llamar ahora". Una llamada comienza a un número predeterminado. Grabamos la hora de inicio. Cuando finaliza la llamada, calculamos cuántos minutos se usaron.

¿Posible?

+0

Si comienzan y terminan la llamada en su aplicación, ¿no puede simplemente verificar la hora actual antes y después de la llamada? –

+0

Eso es lo que trato de descubrir. ¿Las plataformas iOS y Android me permiten detectar cuándo ha finalizado una llamada? – spentak

+0

Puede obtener registros de llamadas en Android e iOS, o si solo le preocupan las llamadas realizadas desde la aplicación como usted describe, entonces puede verificar la hora del sistema. –

Respuesta

9

Para calcular el tiempo habló tanto para llamadas entrantes, salientes utilizar el siguiente receptor de radiodifusión:

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 
      } 
     } 
    } 

Registre su receptor en su archivo de manifiesto de la siguiente manera:

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

también agregar el permiso usos:

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

Sin embargo, la computación de la duración de este modo incluirá el tiempo de recogida, lo que resulta en una estimación de exceso de la duración real. Estoy buscando una solución para esto también, y parece que el registro de llamadas es el único lugar donde puede encontrar la información de duración precisa. –

+1

@Akhil No sé si esto dará resultados precisos porque TelephonyManager.EXTRA_STATE_RINGING es donde obtienes tu hora de inicio y eso significa automáticamente que incluso una llamada perdida tendrá una duración. Hubiera pensado que 'CALL_STATE_OFFHOOK' es el lugar apropiado para iniciar la grabación de la duración – Zidane

+0

, esto no puede funcionar para la llamada saliente –

0

Esto puede ser demasiado tarde, pero solo para cualquiera que pueda ne ed en el futuro. Para llamadas salientes, puede leer la duración desde el CallLog. Para las llamadas entrantes, puede calcular la duración en función de los tiempos de inicio y fin de la llamada.

Cuestiones relacionadas