android 来电拒接_Android学习小记-----拦截电话/拒接电话,规避拒接电话前响一声或者两声的问题...

1 importandroid.app.Service;2 importandroid.content.Context;3 importandroid.content.Intent;4 importandroid.media.AudioManager;5 importandroid.os.Handler;6 importandroid.os.IBinder;7 importandroid.os.Message;8 importandroid.os.RemoteException;9 importandroid.telephony.PhoneStateListener;10 importandroid.telephony.SmsManager;11 importandroid.telephony.TelephonyManager;12 importandroid.text.TextUtils;13 importandroid.util.Log;14

15 importcom.android.internal.telephony.ITelephony;16

17 importjava.lang.reflect.InvocationTargetException;18 importjava.lang.reflect.Method;19 importjava.util.List;20

21 public class PhoneHangUpService extendsService {22 private static final String TAG = "PhoneHangUpService";23 private static final int MSG_DELETE_CALL_LOG = 1;24

25 privateMyPhoneStateListener mPhoneStateListener;26 privateTelephonyManager mTelephonyManager;27 privateContext context;28 publicAudioManager am ;29 private Handler mHandler = newHandler() {30 @Override31 public voiddispatchMessage(Message msg) {32 switch(msg.what) {33 caseMSG_DELETE_CALL_LOG:34 String number =(String) msg.obj;35 //

36 break;37 }38 }39

40 };41

42 @Override43 public voidonCreate() {44 super.onCreate();45 Log.i(TAG, "onCreate");46 context = this;47 //声明监听类,在监听类中实现具体处理

48 mPhoneStateListener = newMyPhoneStateListener();49 mTelephonyManager =(TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);50 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);51

52 am =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);53 }54

55 @Override56 public voidonDestroy() {57 super.onDestroy();58 mTelephonyManager.listen(mPhoneStateListener, 0);59 }60

61 @Override62 public int onStartCommand(Intent intent, int flags, intstartId) {63 return super.onStartCommand(intent, flags, startId);64 }65

66 @Override67 publicIBinder onBind(Intent intent) {68 return null;69 }70

71 //挂断电话方法

72 private booleanhangUp() {73 Class c = TelephonyManager.class;74 ITelephony iTelephony = null;75 Method getITelephonyMethod = null;76 try{77 getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null);78 getITelephonyMethod.setAccessible(true);79 } catch(SecurityException e) {80 e.printStackTrace();81 } catch(NoSuchMethodException e) {82 e.printStackTrace();83 }84 try{85 iTelephony =(ITelephony)86 getITelephonyMethod.invoke(mTelephonyManager, (Object[]) null);87 } catch(IllegalArgumentException e) {88 e.printStackTrace();89 } catch(IllegalAccessException e) {90 e.printStackTrace();91 } catch(InvocationTargetException e) {92 e.printStackTrace();93 }94 if (iTelephony != null) {95 boolean isSuccess = false;96 try{97 isSuccess =iTelephony.endCall();98 am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢复会普通模式,恢复声音

99

100 } catch(RemoteException e) {101 e.printStackTrace();102 }103 returnisSuccess;104 }105 return true;106 }107

108 //监听类,监听来电

109 private final class MyPhoneStateListener extendsandroid.telephony.PhoneStateListener {110 @Override111 public void onCallStateChanged(intstate, String incomingNumber) {112 super.onCallStateChanged(state, incomingNumber);113 Log.i(TAG, "zjq Number:" +incomingNumber);114 if (TelephonyManager.CALL_STATE_RINGING ==state) {115 Log.i(TAG, "zhangjieqiong state:CALL_STATE_RINGING:" +incomingNumber);116 if (!TextUtils.isEmpty(incomingNumber) &&PhoneUtils.isPhoneNumber(incomingNumber)) {117 //拒接电话 当号码为135*****182时拒接

118 if ("135*****182".equals(incomingNumber)) {119 am.setRingerMode(AudioManager.RINGER_MODE_SILENT);//设置为静音模式,解决延迟导致的响铃问题

120 Log.i(TAG, "zjq:the number is endcallnumber:"+incomingNumber);121 if(hangUp()) {122 Log.i(TAG, "zjq end call success ");123 Message msg =mHandler.obtainMessage(MSG_DELETE_CALL_LOG);124 msg.obj =incomingNumber;125 mHandler.sendMessageDelayed(msg, 2000);126 //发送一条短信,提示拒接成功

127 handleSetSystemParamSms(incomingNumber, incomingNumber +" endcall success");128 }129 }130 }131 }else if(TelephonyManager.CALL_STATE_IDLE ==state){132 //挂断133 //挂断电话可以在这里处理

134 Log.i(TAG, "zjq state: hang up(endcall)");135 }else if(TelephonyManager.CALL_STATE_OFFHOOK ==state){136 //接听

137 Log.i(TAG, "zjq state: answer:"+incomingNumber);138 }139 }140

141 }142

143

144 //发送短信方法

145 private voidhandleSetSystemParamSms(String phone, String body) {146 Log.d(TAG, "user get location");147 String msg =body ;148 if (msg != null) {149 Log.d(TAG, "msgBody lenth = " +msg.length());150 SmsManager sms =SmsManager.getDefault();151 List texts =sms.divideMessage(msg);152 for(String text : texts) {153 Log.d(TAG, "zjq send sms to:" +phone);154 sms.sendTextMessage(phone, null, text, null, null);155 }156 }157 }158 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值