1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 安卓学习笔记之骚扰拦截

安卓学习笔记之骚扰拦截

时间:2019-08-01 15:19:55

相关推荐

安卓学习笔记之骚扰拦截

安卓学习笔记之骚扰拦截

1、监听电话状态

2、检测来电号码是否匹配拦截条件

3、若匹配,则挂断电话

实例代码:

获取TelephonyManager 对象,并监听来电状态

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);MPhoneStateListener listener = new MPhoneStateListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

MPhoneStateListener电话状态监听类

class MPhoneStateListener extends PhoneStateListener {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING:if (db.isNumberExist(incomingNumber)) {String mode = db.getMode(incomingNumber);if (mode.equals(MODE_PHONE_TEXT) | mode.equals(MODE_ONLY_PHONE)) {//挂断电话endCall();Uri uri = Uri.parse("content://call_log/calls");getContentResolver().registerContentObserver(uri , true,new MContentObserver(new Handler(),incomingNumber));}};break;}}}

class MContentObserver extends ContentObserver{private String inCompingNumber;/*** @param handler* @param inCompingNumber*/public MContentObserver(Handler handler, String inCompingNumber) {super(handler);this.inCompingNumber = inCompingNumber;}//当数据改变时,调用此方法@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);deleteCallLog(inCompingNumber);getContentResolver().unregisterContentObserver(this);}

/*** 删除来电号码记录* @param inCompingNumber * */private void deleteCallLog(String inCompingNumber) {Uri uri = Uri.parse("content://call_logs/call");getContentResolver().delete(uri, "number=?", new String[]{inCompingNumber});}

/*** 挂断电话*/private void endCall() {try {//通过类加载器拿到ServiceManagerClass<?> classs = getClassLoader().loadClass("android.os.ServiceManager");// 通过反射拿到当前方法getServiceMethod method = classs.getDeclaredMethod("getService", String.class);// getService的返回值为IBinder对象 即TelephonyManagerIBinder binder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);ITelephony iTelephony = ITelephony.Stub.asInterface(binder);// 挂断电话iTelephony.endCall();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (RemoteException e) {e.printStackTrace();}}

需要权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.CALL_PHONE"/>

还要添加两个aidl文件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。