在Android中只捕获来电
我正在创建一个应用程序,只需要捕获来电。我正在使用广播类和电话侦听器类来处理这个问题,在PhoneListner类中捕获是否有传入呼叫。我的问题是,如果有外线电话,我不希望我的应用程序被触发。即使有任何传出呼叫,我的广播类也会被触发(尽管我正在为传出呼叫退出应用程序),但我不喜欢应用程序实际上被触发的想法。是否有处理来电的特定意图?您可以使用意图,并存储最后的状态。如果当前状态为在Android中只捕获来电,android,android-intent,broadcastreceiver,android-broadcast,Android,Android Intent,Broadcastreceiver,Android Broadcast,我正在创建一个应用程序,只需要捕获来电。我正在使用广播类和电话侦听器类来处理这个问题,在PhoneListner类中捕获是否有传入呼叫。我的问题是,如果有外线电话,我不希望我的应用程序被触发。即使有任何传出呼叫,我的广播类也会被触发(尽管我正在为传出呼叫退出应用程序),但我不喜欢应用程序实际上被触发的想法。是否有处理来电的特定意图?您可以使用意图,并存储最后的状态。如果当前状态为TelephonyManager.EXTRA\u state\u OFFHOOK,则存在正在拨号、处于活动状态或处于保
TelephonyManager.EXTRA\u state\u OFFHOOK
,则存在正在拨号、处于活动状态或处于保留状态的呼叫。如果前一状态为振铃,则这是来电。如果前一状态为空闲,则这是传出呼叫
以下接收器区分不同的场景:
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
// Device call state: Ringing. A new call arrived and is ringing or waiting. In the latter case, another call is already active.
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
}else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){
// Device call state: Off-hook. At least one call exists that is dialing, active, or on hold, and no calls are ringing or waiting.
if(lastState.equals(TelephonyManager.EXTRA_STATE_IDLE){
// outgoing call
} else if(lastState.equals(TelephonyManager.EXTRA_STATE_RINGING){
// incoming call
}
}else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
// Device call state: No activity.
}
lastState = state;
}
..…这是我的清单,我正在使用您提到的意图,但即使您拨出电话,也会触发此事件。安卓网站还表示,它检测到手机状态的变化。我的意图是,如果有外呼,我的应用程序不应该被触发。嗯,这似乎也会被外呼触发。您可以做的是为
android.intent.action.NEW\u OUTGOING\u CALL
intent注册一个接收器。发生这种情况时,存储某种变量。在操作\u PHONE\u STATE\u CHANGED
意图的onReceive()中,您可以检查传出是否发生在之前不久。更新:另一个似乎有效的解决方案是在onReceive()中设置最后一个状态;我用那个代码更新了我的答案。是的,我明白你的意思,但似乎没有解决办法(至少我不知道)来处理来电。如果有任何传出呼叫,应用程序将被触发(我理解并感谢),您(Jeff)已经为其提供了解决方案。