问题
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