我正在编写一个应用程序,为每个国际拨出电话提供一个对话框(对话框,这是一项活动)。应用程序中断拨出呼叫并为所有国际呼叫发出警报。在用户确认时,会拨打具有相同号码的新呼叫。
我的应用与此非常相似 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);
}
如何检索由我发出的呼叫的呼叫结束通知,以便我可以编写一些代码以启用广播接收器以供将来呼叫使用。
答案 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" />