【问题标题】:How to get the call status for outgoing calls? [duplicate]如何获取拨出电话的通话状态? [复制]
【发布时间】:2013-03-08 05:18:51
【问题描述】:
我是 android 的初学者,正在开发一个 android 应用程序来监控用户在通话时的网络状态(对于来电和去电)...
我可以通过实现 PhonestateListner 类并覆盖 onCallStateChanged 方法来监控传入呼叫的网络状态,我使用的是在 onCallStateChanged 方法内的 TelephonyManager 类中定义的常量(CALL_STATE_IDLE、CALL_STATE_OFFHOOK 和 CALL_STATE_RINGING),但这些常量是无法正常拨出电话...
my question is
- 有呼出时如何监控通话状态(RINGING,OFF_HOOK,IDLE)??
- android中有没有API可以监控呼出的通话状态???如果是,请说明...
请帮助我理解这个概念...感谢您的宝贵时间
【问题讨论】:
标签:
android
android-activity
telephonymanager
android-broadcast
【解决方案1】:
以下代码帮助您在onCreate中获取网络状态代码
StateListener phoneStateListener = new StateListener();
TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
为手机的监听状态创建一个内部类。
class StateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("call Activity off hook");
LockScreenActivity.this.finish();
break;
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}
};
在manifest文件中设置权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
【解决方案2】:
BroadcastReceiver 带有用于拨出呼叫android.intent.action.NEW_OUTGOING_CALL 和android.intent.action.PHONE_STATE 的操作。
当拨出电话时,android.intent.action.NEW_OUTGOING_CALL 将被广播。接收意图将有一个额外的字符串变量Intent.EXTRA_PHONE_NUMBER,其中包含传出号码。这需要权限android.permission.PROCESS_OUTGOING_CALLS。
要检测来电,请为操作android.intent.action.PHONE_STATE 注册一个广播接收器。这将在电话状态发生变化时广播。接收意图将有一个额外的字符串变量TelephonyManager.EXTRA_STATE,用于描述电话状态。如果这个状态是TelephonyManager.EXTRA_STATE_RINGING,那么会有另一个额外的字符串变量TelephonyManager.EXTRA_INCOMING_NUMBER。此变量包含传入的电话号码。请注意,当状态不是TelephonyManager.EXTRA_STATE_RINGING 时,此变量将不存在。