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)
任何人都可以帮我区分来电和来电,所以我会处理这个事件.
提前致谢.
我想限制在拨打电话时打开我的应用程序.
上case TelephonyManager.CALL_STATE_OFFHOOK:检查,如果前一个状态是CALL_STATE_RINGING或CALL_STATE_IDLE(例如通过设置在两种情况下不同的标志).
在后一种情况下,继续打开您的应用程序,否则什么也不做
| 归档时间: |
|
| 查看次数: |
18378 次 |
| 最近记录: |