如何获取我从我的应用程序中放置的呼叫的呼叫结束通知 - Android

时间:2015-06-21 06:48:14

标签: android broadcastreceiver infinite-loop

我正在编写一个应用程序,为每个国际拨出电话提供一个对话框(对话框,这是一项活动)。应用程序中断拨出呼叫并为所有国际呼叫发出警报。在用户确认时,会拨打具有相同号码的新呼叫。

我的应用与此非常相似 Outgoing call don't start

然而,我的广播接收器甚至收到我从我的应用程序发出的拨出电话,这导致无限循环。我使用以下代码在从我的应用程序发出呼叫后禁用广播接收器。

private void makeCall1(String number)  {
    PackageManager pm = mContext.getPackageManager();
     ComponentName componentName = new ComponentName(mContext,OutgoingCallReceiver.class);
   pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
   Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(number));
startActivity(callIntent);
  // Now wait for the call to end somehow and afterwards ->
  // pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
 }

如何检索由我发出的呼叫的呼叫结束通知,以便我可以编写一些代码以启用广播接收器以供将来呼叫使用。

1 个答案:

答案 0 :(得分:0)

你需要添加一个变量来控制它......当首先调用BroadCastReceiver时(即当用户调用而不是你的应用程序时),然后将变量设置为true ...现在如果为true则显示对话框,然后在断开呼叫时将变量设置为false。

现在如何知道通话已经结束?

您可以使用呼叫状态知道呼叫已断开连接。

这些是拨打电话时的状态 -

CALL_STATE_OFFHOOK->CALL_STATE_IDLE

CALL_STATE_OFFHOOK - >在拨打电话时呼叫 CALL_STATE_IDLE - - - - >呼叫断开时呼叫

现在您想知道通话何时断开,您可以设置一个变量来控制BroadCastReceiver

private static boolean isCalled=false; 
  ................
  ................
     @Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
  if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
     isCalled= true;
     Log.v("ranjapp", "Within DIALED NUMBER");
    } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE) && isCalled){
         Log.v("ranjapp", "Within IDLE");
      //ADD YOUR CODE FOR WHAT NEEDS TO BE DONE AT CALL DISCONNECT
         isCalled=false;
 }
 .........................
 .........................

另外不要忘记在清单中添加权限,如下所示:

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