如何分别在android中获取来电和拨出电话的事件。 实际上我正在尝试开发一个在来电时打开的应用程序,如果数字存在于数据库中并且工作正常。但如果我从设备拨打电话(拨打电话),如果数字存在于数据库中,它仍会打开我的应用程序。 我想限制在拨打电话时打开我的应用程序。
我的清单包含我收到这样的来电:
<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;
}
}
任何人都可以帮助我区分拨出电话与来电,以便我处理此事件。
提前致谢。
答案 0 :(得分:5)
我想限制在拨打电话时打开我的应用程序。
case TelephonyManager.CALL_STATE_OFFHOOK:
检查以前的状态是CALL_STATE_RINGING
还是CALL_STATE_IDLE
(例如,在两种情况下都设置了不同的标志)。
在后一种情况下,继续打开您的应用程序,否则什么都不做
答案 1 :(得分:4)
在您的接收器中添加<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
并使用您的onReceive()
方法进行处理。
<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>
答案 2 :(得分:-1)
意图操作android.intent.action.NEW_OUTGOING_CALL
处理拨出电话,但对于来电,我建议以这种方式检查:
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
//outgoing call
} else if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) {
//incoming call
}