2012-04-05 114 views
7

是否可以通过其手机供应商使用用户电话,并跟踪电话的长度?追踪电话通话时间

因此,用户在应用程序中按下“立即呼叫”按钮。通话开始到预定的号码。我们记录开始时间。通话结束后,我们计算使用了多少分钟。

可能吗?

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

填写您的接收器在您的清单文件中像这样:

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

而且添加使用许可,允许呼入,呼出电话使用下面的广播接收器

+0

如果他们在您的应用程序中启动和结束通话,您不能只在通话前后检查当前时间吗? – 2012-04-05 16:43:53

+0

这就是我想要弄清楚的。 iOS和Android平台是否允许我检测通话何时结束? – spentak 2012-04-05 16:46:20

+0

您可以在Android和iOS上获得通话记录,或者如果您只关心应用程序中描述的来电,则可以检查系统时间。 – 2012-04-05 16:50:14

回答

9

计算时间说话。

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

虽然计算这样的持续时间将包括接机时间,从而导致对实际持续时间超出的估计。我也在寻找解决方案,看起来呼叫日志是唯一可以找到准确的持续时间信息的地方。 – 2013-07-13 16:31:43

+1

@Akhil我不知道这是否会给出准确的结果,因为TelephonyManager.EXTRA_STATE_RINGING是您获得开始时间的地方,这自动意味着即使是未接来电也会持续一段时间。我本来以为'CALL_STATE_OFFHOOK'是开始记录时间的适当位置 – Zidane 2016-07-28 12:42:56

+0

这不适用于传出呼叫 – 2017-01-04 18:15:42

0

这可能太晚了,但只适用于任何人将来编辑它。对于拨出电话,您可以从CallLog中读取持续时间。对于来电,您可以根据通话的开始和结束时间计算持续时间。