Android中监听电话接听拨打、收发短信的实例

电话短信黑名单所用到的代码片及扩展段记录

黑名单电话拦截功能

通过TelephonyManager实现监听电话的状态进行拦截操作
代码片段:
	private PhoneStateListener listener = new PhoneStateListener() {@Overridepublic void onCallStateChanged(int state, final String incomingNumber) {super.onCallStateChanged(state, incomingNumber);//监听响铃状态
			//同时还可以监听到其他的状态if(TelephonyManager.CALL_STATE_RINGING == state) {int type = dao.getType(incomingNumber);//如果判断是拦截状态if(type == BlackListConstant.TYPE_ALL || type == BlackListConstant.TYPE_NUMBER) {Log.i("tag", "拦截电话");
				    //拦截电话并挂断  挂断电话的方法被隐藏了 需要通过aidl调用
//				    private ITelephony getITelephony() {
//				        return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
//				    }//通过反射加载ServiceManager类try {Class clazz = Class.forName("android.os.ServiceManager");Method method = clazz.getMethod("getService", String.class);IBinder iBinder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);ITelephony asInterface = ITelephony.Stub.asInterface(iBinder);//挂断电话asInterface.endCall();//添加到拦截数据库中BlackListSmsItem item = new BlackListSmsItem();item.number = incomingNumber;String format = new SimpleDateFormat("yy年MM日dd hh:mm:ss").format(new Date());item.date = format;new BlackListDao(BlackListReceiveService.this).setSmsRecord(item);} catch (Exception e) {e.printStackTrace();}final ContentResolver contentResolver = getContentResolver();final Uri url = CallLog.Calls.CONTENT_URI;//注册一个内容观察者//参数二:true,如果当前URL是content://call_log/calls/xxx/xxx,也进行一个观察//参数二:false ,只对content://call_log/calls这个uri进行观察contentResolver.registerContentObserver(url, true, new ContentObserver(new Handler()) {//只要对应的数据修改了,那该方法就会被回调public void onChange(boolean selfChange) {String where = CallLog.Calls.NUMBER + " = ?";String[] selectionArgs = new String []{incomingNumber};contentResolver.delete(url, where, selectionArgs);};});}}}};
获取TelephonyManager及注册监听
tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);		
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

黑名单短信拦截功能

通过Broadcast及相应的action可以监听到手机接收到短信的状态,该功能若有开关应当在Service中动态注册广播,开关时只需要执行Service的start()、stop() 方法即可 所需权限:
代码片段:
	//监听接收短信的广播接收器private class BlackListSMSReceiver extends BroadcastReceiver {private String number;private String content;@Overridepublic void onReceive(Context context, Intent intent) {Bundle extras = intent.getExtras();Object[] object = (Object[])extras.get("pdus");for(Object obj : object) {SmsMessage sms = SmsMessage.createFromPdu((byte[])obj);number = sms.getOriginatingAddress();content = sms.getMessageBody();//通过数据库查询该手机的拦截类型int type = dao.getType(number);//如果是拦截的号码进行拦截if(type == BlackListConstant.TYPE_ALL || type == BlackListConstant.TYPE_MESSAGE) {//广播中断abortBroadcast();//添加到拦截数据库中BlackListSmsItem item = new BlackListSmsItem();item.number = number;item.content = content;String format = new SimpleDateFormat("yy年MM日dd hh:mm:ss").format(new Date());item.date = format;new BlackListDao(context).setSmsRecord(item);}}}}
注册广播的代码:
		bsr = new BlackListSMSReceiver();
		IntentFilter filter = new IntentFilter();
		//接收短信相应的actionfilter.addAction("android.provider.Telephony.SMS_RECEIVED");
		//设置广播的优先级为最高filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);registerReceiver(bsr, filter);

扩展1:监听手机拨打电话

制作归属地显示功能所用到 所需权限:

代码片段:
	private class CallReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.i("tag", "拦截成功");//获取拨打电话的手机号码String phone_number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);String location = LocationDao.getLocation(LocationService.this, phone_number);Log.i("tag",location);//弹出吐司//Toast.makeText(LocationService.this, location, Toast.LENGTH_SHORT).show();locationToast.show(location);}}
  注册广播代码(采用动态注册):   
		callReceiver = new CallReceiver();IntentFilter filter = new IntentFilter();//打电话的actionfilter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);registerReceiver(callReceiver, filter);

扩展2:手机发送短信功能

简单实现: 不适合较长的短信,长短信需要分段发送,具体参考 SmsManager的Api 
				//发送短信SmsManager sm = SmsManager.getDefault();sm.sendTextMessage(safe_num, null, "your Telephone ... ", null, null);












本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部