在Android中只捕获来电

在Android中只捕获来电,android,android-intent,broadcastreceiver,android-broadcast,Android,Android Intent,Broadcastreceiver,Android Broadcast,我正在创建一个应用程序,只需要捕获来电。我正在使用广播类和电话侦听器类来处理这个问题,在PhoneListner类中捕获是否有传入呼叫。我的问题是,如果有外线电话,我不希望我的应用程序被触发。即使有任何传出呼叫,我的广播类也会被触发(尽管我正在为传出呼叫退出应用程序),但我不喜欢应用程序实际上被触发的想法。是否有处理来电的特定意图?您可以使用意图,并存储最后的状态。如果当前状态为TelephonyManager.EXTRA\u state\u OFFHOOK,则存在正在拨号、处于活动状态或处于保

我正在创建一个应用程序,只需要捕获来电。我正在使用广播类和电话侦听器类来处理这个问题,在PhoneListner类中捕获是否有传入呼叫。我的问题是,如果有外线电话,我不希望我的应用程序被触发。即使有任何传出呼叫,我的广播类也会被触发(尽管我正在为传出呼叫退出应用程序),但我不喜欢应用程序实际上被触发的想法。是否有处理来电的特定意图?

您可以使用意图,并存储最后的状态。如果当前状态为
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)已经为其提供了解决方案。