2015-06-21 32 views
1

我写每一个国际呼出呼叫的应用,给出了一个对话(对话这是一个活动)。该应用程序会中断呼出并为所有国际呼叫发出警报。在用户确认时,将放置一个具有相同号码的新呼叫。如何获得我从我的应用程序发出的呼叫通话结束通知 - Android电子

我的应用程序是非常相似,这一个 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

您需要添加一个变量来控制它......当'BroadCastReceiver'首先被调用(即当用户调用的地方,这将是不从你的应用程序),然后将变量设置为true ...现在,如果只有true,则显示对话框,然后将该变量设置为false。 – Psypher

+0

兰芝斯您好,感谢您的回复。当我设置一个标志为假后,我显示对话框和发出呼叫从我的应用程序,是由我自己的广播接收机接收到,我把从我的应用程序的调用(导致的无限循环).. 我必须在通话结束后将标志设置为假。任何想法如何得到这一点。 – user2314275

+0

嗨..我刚刚添加它作为答案如下 – Psypher

回答

0

您需要添加一个变量来控制它......当广播接收器首次调用(即这将是当用户从地方您的应用程序调用,而不是),那么变量设置为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" /> 
相关问题