2012-04-05 9 views
7

Ist es möglich, das Telefon des Benutzers über seinen Mobilfunkanbieter zu nutzen und die Länge eines Telefonanrufs zu verfolgen?Verfolgen einer Telefonanrufdauer

So drückt der Benutzer einen Knopf in der App "Call Now". Ein Anruf beginnt zu einer vorbestimmten Nummer. Wir erfassen die Startzeit. Wenn der Anruf endet, berechnen wir, wie viele Minuten verwendet wurden.

Möglich?

+0

Wenn sie den Anruf in Ihrer App starten und beenden, können Sie nicht einfach die aktuelle Zeit vor und nach dem Anruf überprüfen? –

+0

Das ist, was ich versuche herauszufinden. Können die iOS- und Android-Plattformen erkennen, wann ein Anruf beendet wurde? – spentak

+0

Sie können Anrufprotokolle für Android und iOS abrufen. Wenn Sie nur über Anrufe aus der App informiert sind, die Sie beschreiben, können Sie die Systemzeit überprüfen. –

Antwort

9

Zeit zu berechnen, sprach sowohl für eingehende, ausgehende Anrufe verwenden Sie die folgende Rundfunkempfänger:

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

Ihr Empfänger in Ihrer Manifest-Datei wie folgt registrieren:

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

Auch die Verwendungen Erlaubnis hinzufügen:

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

Obwohl die Berechnung der Dauer wie folgt umfasst die Abholzeit, was zu einer Schätzung für die Überschreitung der tatsächlichen Dauer führt. Ich suche auch nach einer Lösung dafür, und es scheint, als ob das Anrufprotokoll der einzige Ort ist, an dem Sie die genaue Dauer finden können. –

+1

@Akhil Ich weiß nicht, ob dies genaue Ergebnisse geben wird, weil TelephonyManager.EXTRA_STATE_RINGING ist, wo Sie Ihre Startzeit bekommen und das bedeutet automatisch, dass sogar ein verpasster Anruf eine Dauer hat. Ich hätte gedacht, "CALL_STATE_OFFHOOK" ist der geeignete Ort, um die Aufnahmedauer zu starten – Zidane

+0

dies kann nicht für ausgehende Anrufe funktionieren –

0

Das ist vielleicht zu spät, aber nur für jeden, der mag ed es in der Zukunft. Bei ausgehenden Anrufen können Sie die Dauer aus dem CallLog ablesen. Bei eingehenden Anrufen können Sie die Dauer basierend auf den Start- und Endzeiten des Anrufs berechnen.