Android实现判断手机未接来电及处理方法
通常来说Android手机没有未接来电的监听器,如果要实现对未接来电的处理,则需要自己编写程序来实现。本文所述程序实例即为Android实现判断手机未接来电及处理方法。主要分为四个步骤来进行:
1、编写CallListener,处理手机状态变更监听,当状态改变时进行处理:
packagerbase.app.smshelpmate.call.listener; importjava.text.MessageFormat; importrbase.app.smshelpmate.Config; importrbase.app.smshelpmate.R; importrbase.app.smshelpmate.call.enums.CallStateEnum; importrbase.app.smshelpmate.forward.ForwardManager; importrbase.app.smshelpmate.forward.enums.ForwardType; importrbase.app.smshelpmate.forward.vo.ForwardParam; importandroid.content.Context; importandroid.telephony.PhoneStateListener; importandroid.telephony.TelephonyManager; importandroid.util.Log; publicclassCallListenerextendsPhoneStateListener{ privatestaticfinalStringTAG="sms"; privatestaticintlastetState=TelephonyManager.CALL_STATE_IDLE;//最后的状态 privateContextcontext; publicCallListener(Contextcontext){ super(); this.context=context; } publicvoidonCallStateChanged(intstate,StringincomingNumber){ Log.v(TAG,"CallListenercallstatechanged:"+incomingNumber); Stringm=null; //如果当前状态为空闲,上次状态为响铃中的话,则认为是未接来电 if(lastetState==TelephonyManager.CALL_STATE_RINGING &&state==TelephonyManager.CALL_STATE_IDLE){ sendSmgWhenMissedCall(incomingNumber); } //最后改变当前值 lastetState=state; } privatevoidsendSmgWhenMissedCall(StringincomingNumber){ //未接来电处理(发短信,发email等) } }
2、编写CallReceiver,注册来电广播接收器:
packagerbase.app.smshelpmate.call.service; importrbase.app.smshelpmate.Const; importrbase.app.smshelpmate.call.listener.CallListener; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.os.Bundle; importandroid.telephony.PhoneStateListener; importandroid.telephony.TelephonyManager; importandroid.util.Log; publicclassCallReceiverextendsBroadcastReceiver{ publicvoidonReceive(Contextcontext,Intentintent){ Log.i("sms","CallReceiverStart..."); TelephonyManagertelephony=(TelephonyManager)context .getSystemService(Context.TELEPHONY_SERVICE); CallListenercustomPhoneListener=newCallListener(context); telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); Bundlebundle=intent.getExtras(); StringphoneNr=bundle.getString("incoming_number"); Log.i("sms","CallReceiverPhoneNumber:"+phoneNr); } }
3、在AndroidManifest.xml中的application节点下注册电话状态改变的广播接收:
<manifest...> <application...> <receiverandroid:name=".call.service.CallReceiver"> <intent-filterandroid:priority="100"> <actionandroid:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver> </application> </manifest>
4、在AndroidManifest.xml中添加读取手机状态的权限:
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
通过以上的步骤,当手机有未接来电时sendSmgWhenMissedCall该方法就会触发,就可以进行相应的处理。