zoukankan      html  css  js  c++  java
  • Android 短信发送监控

    最近研究了一下如何对Android发送短信进行监控,首先考虑到是否会有广播机制,查了一下api文档发现没有,到了网上查了半天也没用解决办法,主要问题还是Android没有提供这中监听机制,怎么办呢,诶,苦想了几天,想到了一个还算可行的方法,但是只能对系统短信进行监控,还是不能对第三方进行监控,没办法,好了下面介绍一下我的实现方法。主要是利用Android对contentProvider内容变化监听方法实现ContentObserver类,

    具体如下;

    package com.listener.app;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import android.app.Service;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.database.ContentObserver;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Handler;
    import android.os.IBinder;
    import android.util.Log;
    
    public class SmsStatus extends Service{
    	
    	
    	@Override
    	public void onCreate() {
    		//为content://sms的数据改变注册监听器
    		getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, new SmsObserver(new Handler()));
    		
    		super.onCreate();
    	}
    	// ContentObserver监听器类
    	private final class SmsObserver extends ContentObserver{
    		
    		public SmsObserver(Handler handler){
    			super(handler);
    		}
    		public void onChange(boolean selfChange){
    			
    			sendMsg();
    		   
    		}
    		
    		private	void sendMsg(){
    			Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"), null, null, null, null);
    			if (cursor.moveToFirst()){
    				StringBuilder sb = new StringBuilder();
    				// 获取短信的发送地址
    				sb.append("address=").append(
    					cursor.getString(cursor.getColumnIndex("address")));					
    				// 获取短信的标题
    				sb.append('\n'+"subject=").append(
    					cursor.getString(cursor.getColumnIndex("subject")));
    				// 获取短信的内容
    				sb.append('\n'+"body=").append(
    					cursor.getString(cursor.getColumnIndex("body")));
    				// 获取短信的发送时间
    				 SimpleDateFormat dateFormat = new SimpleDateFormat(   
    	                        "yyyy-MM-dd hh:mm:ss");   
    	                Date d = new Date(Long.parseLong(cursor.getString(cursor.getColumnIndex("date"))));   
    	               String date = dateFormat.format(d); 
    				sb.append('\n'+"time=").append(date);
    				Log.e("msg", "Sent SMS:" + sb.toString());
    			}
    			if(cursor!=null){
    				cursor.close();
    				cursor=null;
    			}
    		}
    	
    	
    	@Override
    	public IBinder onBind(Intent intent) {
    		return null;
    	}	
    	
    }
    

    以上有几点需要注意;

    1,content必须为content://sms/不能改为content://sms/outbox,即系统只能对整个短信的content进行监控而不能对content中item进行监控

    2,ContentObserver监听时最好放置在service类中,以确保内容为时时监听。


  • 相关阅读:
    SourceInsight宏插件3(非常好用,强力推荐)
    SourceInsight宏插件2(非常好用,强力推荐)
    Beyond Compare 3添加右键菜单
    OpenCV图像读取和写入
    TY科技的工程配置(VS2017 & Opencv4.0.0)
    Visual Studio2017 & pcl1.8.1 库的配置
    LeetCode No.198
    LeetCode No.191
    LeetCode No.190
    LeetCode No.179**
  • 原文地址:https://www.cnblogs.com/happyxiaoyu02/p/6818976.html
Copyright © 2011-2022 走看看