如何在android中识别来电和拨出电话

Hir*_*bhi 12 android broadcastreceiver

如何分别在android中获取来电和拨出电话的事件.实际上我正在尝试开发一个在来电时打开的应用程序,如果数字存在于数据库中并且工作正常.但如果我从设备拨打电话(拨打电话),如果数字存在于数据库中,它仍会打开我的应用程序.我想限制在拨打电话时打开我的应用程序.

我的清单包含我收到这样的来电:

<receiver android:name=".IncomingCallReceiver" >
    <intent-filter >             
        <action android:name="android.intent.action.PHONE_STATE" />             
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

IncomingCallReceiver:

MyPhoneStateListener phoneListener=new MyPhoneStateListener(context);
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我区分来电和来电,所以我会处理这个事件.

提前致谢.

Don*_*Gru 5

我想限制在拨打电话时打开我的应用程序.

case TelephonyManager.CALL_STATE_OFFHOOK:检查,如果前一个状态是CALL_STATE_RINGINGCALL_STATE_IDLE(例如通过设置在两种情况下不同的标志).
在后一种情况下,继续打开您的应用程序,否则什么也不做