我是android的初学者,正在开发一个Android应用程序来监控用户通话时的网络状态(对于来电和去电)......
我可以通过实现PhonestateListner类并覆盖onCallStateChanged方法监视网络状态。对于传入调用,我使用onCallStateChanged方法内TelephonyManager类中定义的常量(CALL_STATE_IDLE,CALL_STATE_OFFHOOK和CALL_STATE_RINGING),但这些常量是拨打电话时工作不正常......
my question is
请帮助我理解这个概念......感谢您的时间
答案 0 :(得分:3)
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
注册BroadcastReceiver。当手机状态发生变化时,将播放此广告。接收意图将有一个额外的字符串变量TelephonyManager.EXTRA_STATE
,用于描述电话状态。如果此状态为TelephonyManager.EXTRA_STATE_RINGING
,则会有另一个额外的字符串变量TelephonyManager.EXTRA_INCOMING_NUMBER
。此变量包含传入的电话号码。请注意,当状态不是TelephonyManager.EXTRA_STATE_RINGING
时,此变量将不存在。
答案 1 :(得分:2)
以下代码可帮助您获取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" />