how to identify incoming call and outgoing call in android

寵の児 提交于 2019-12-29 04:20:07

问题


how to get the events of incoming call and outgoing call in android separately. Actually i was trying to develop an application that open on incoming call if number is exist in database and it work OK. but if i call from the device(outgoing call) and if number is exist in database still it open my application. i want to restrict to open my application on outgoing call.

my manifest contain i receive incoming call like this:

<receiver android:name=".IncomingCallReceiver" >
    <intent-filter >             
        <action android:name="android.intent.action.PHONE_STATE" />             
    </intent-filter>
</receiver>

IncomingCallReceiver:

MyPhoneStateListener phoneListener=new MyPhoneStateListener(context);
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);

MyPhoneStateListener:

public void onCallStateChanged(int state,String incomingNumber){
      switch(state) {
          case TelephonyManager.CALL_STATE_IDLE:
              Log.d("DEBUG", "IDLE");
          break;
          case TelephonyManager.CALL_STATE_OFFHOOK:
              Log.d("DEBUG", "OFFHOOK");                        
              Intent i = new Intent(context, MyMainActivity.class);
              i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(i);
          break;
          case TelephonyManager.CALL_STATE_RINGING:
              Log.d("DEBUG", "RINGING");
          break;
    }
}

can anyone help me to differentiate outgoing call from incoming call so i'll handle this events.

Thanks in advance.


回答1:


i want to restrict to open my application on outgoing call.

on case TelephonyManager.CALL_STATE_OFFHOOK: check if the previous state was CALL_STATE_RINGING or CALL_STATE_IDLE (for example by settings a different flag in both cases).
In the latter case proceed with opening your application, else do nothing




回答2:


add <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> in your receiver and process it in your onReceive() method.

<receiver android:name=".IncomingCallReceiver" >
    <intent-filter >             
       <action android:name="android.intent.action.PHONE_STATE" />
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" />             
    </intent-filter>
</receiver>



回答3:


The intent action android.intent.action.NEW_OUTGOING_CALL process the outgoing calls, but for the incoming call i suggest to check it this way:

if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
        //outgoing call
} else if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) {
        //incoming call
}


来源:https://stackoverflow.com/questions/7485482/how-to-identify-incoming-call-and-outgoing-call-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!