android删除私密信息

效果如图:
图一为删除信息后的提示
图二为来信息后的提示
图三为检测到的私密短信,这里的关键字为:验证码&&密码
图四为权限
图五.六为利用DBMS和DBBroswer for sqlite分析的手机数据库截屏
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

主要思路:
1. 分析出短信数据库结构,信息都存储在mmssms.db中的sms表中。关键字段有:_id(短信序号),body(短信内容),thread_id(联系人序号),person(名字,但经常得到null)
while (cur.moveToNext()) {
String number=cur.getString(cur.getColumnIndex(“address”));//手机号
String name = cur.getString(cur.getColumnIndex(“person”));//联系人姓名列表
String body = cur.getString(cur.getColumnIndex(“body”));//信息
String id=cur.getString(cur.getColumnIndex(“_id”));
2. 通过Pattern .Match 匹配关键字来检索数据库里的信息,若匹配则获取。
Pattern pattern=Pattern.compile(“.(验证码|密码).“);
Matcher matcher=pattern.matcher(body);
3. 新信息到来时提醒并将信息显示在页面上:继承ContentObserver 观察者模式
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
super.onChange(selfChange);
//每当有新短信到来时,使用我们获取短消息的方法
smsInfos=getSmsFromPhone();
adapter.notifyDataSetChanged();
//如何判断是否private message?
Toast.makeText(MainActivity.this,”There have a new message!”,Toast.LENGTH_SHORT).show();
// Message message=new Message();
// message.what=1;
// message.obj=newSmsInfo;
// handler.sendMessage(message);
Log.i(SMS_MESSAGE,”correct”);

    }

4. 删除信息,再次读取数据库
while (position>=0) {
String id = smsInfos.get(position).getId();
//通过协议读取mmssms.db ,不能直接读取
Uri deleteUri = Uri.parse(“content://sms”);
getContentResolver().delete(deleteUri, “sms._id=?”, new String[]{id});
smsInfos.remove(position);
position = position - 1;
}

具体代码:

 class MainActivity extends Activity {
        private ListView showNote;
        private Uri SMS_INBOX = Uri.parse("content://sms");
        private SmsObserver smsObserver;
        private Button deleteButton;
        private SmsAdapter adapter;
        private final static String SMS_MESSAGE="newSmsInfo";
    //    private List<SmsInfo> newSmsInfo=new ArrayList<SmsInfo>();
//        public ArrayList<String> note;
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
//            setTitle(R.string.title);//
        setContentView(R.layout.app_login);
        showNote=(ListView)findViewById(R.id.showList);
        smsInfos=getSmsFromPhone();
        //检测返回的列表长度是否一致
        //  final int count=smsInfos.size();
        smsObserver = new SmsObserver(this, smsHandler);
        getContentResolver().registerContentObserver(SMS_INBOX, true, smsObserver);

        adapter=new SmsAdapter(this);
        showNote.setAdapter(adapter);
        deleteButton=(Button)findViewById(R.id.delete);
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //返回列表长度
                int position=smsInfos.size();
                int count=position;
                //从零计数
                position=position-1;
                while (position>=0) {
                    String id = smsInfos.get(position).getId();
                    //通过协议读取mmssms.db ,不能直接读取
                    Uri deleteUri =   Uri.parse("content://sms");
                    getContentResolver().delete(deleteUri, "sms._id=?", new String[]{id});
                    smsInfos.remove(position);
                    position = position - 1;
                }
//                SmsAdapter adapter=new SmsAdapter(MainActivity.this);
//                //刷新列表
//
//                showNote.setAdapter(adapter);
                //通知数据改变
               // adapter.notifyDataSetChanged();
                adapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this,"删除了"+count+"条信息!",Toast.LENGTH_SHORT).show();
            }

        });

    }
        private List<SmsInfo> smsInfos=new ArrayList<SmsInfo>();
    //读取短信数据库mmssms.db 的基本表sms 并返回查找的字段
        public List<SmsInfo> getSmsFromPhone() {
            ContentResolver cr = getContentResolver();
            List<SmsInfo> smsInfoList=new ArrayList<SmsInfo>();
            //查询字段
            String []projection=new String []{"address","person","body","_id"};
            Cursor cur = cr.query(SMS_INBOX, projection, null, null, "date desc");
            if (cur!=null){
            while (cur.moveToNext()) {
                String number = cur.getString(cur.getColumnIndex("address"));//手机号
                String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表
                String body = cur.getString(cur.getColumnIndex("body"));//信息
                String id=cur.getString(cur.getColumnIndex("_id"));
                // 过滤条件为密码或验证码
                Pattern pattern=Pattern.compile(".*(验证码|密码).*");
                Matcher matcher=pattern.matcher(body);
                if (matcher.matches()){
                    SmsInfo smsInfo = new SmsInfo();
                    smsInfo.setName(name);
                    smsInfo.setAddress(number);
                    smsInfo.setText(body);
                    smsInfo.setId(id);
                    smsInfoList.add(smsInfo);
                }


            }
                cur.close();
            }
//                }
            return smsInfoList;
        }













    Handler smsHandler=new Handler();
 //   {
//        @Override
//        public void handleMessage(Message msg) {
//            super.handleMessage(msg);
//            if (msg.what==1){
//                SmsAdapter smsAdapter=new SmsAdapter(MainActivity.this);
//                showNote.setAdapter(smsAdapter);
//                smsAdapter.notifyDataSetChanged();
//
//
//            }
//        }
//    };
    public  class SmsObserver extends ContentObserver {
        private Context context;
        private Handler handler;
   //     private final static int SMS_MESSAGE=1;

        public SmsObserver(Context context, android.os.Handler handler) {
            super(handler);
            this.context=context;
            this.handler=handler;
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            //每当有新短信到来时,使用我们获取短消息的方法
            smsInfos=getSmsFromPhone();
            adapter.notifyDataSetChanged();
            //如何判断是否private message?
            Toast.makeText(MainActivity.this,"There have a new message!",Toast.LENGTH_SHORT).show();
           // Message message=new Message();
           // message.what=1;
          //  message.obj=newSmsInfo;
         //   handler.sendMessage(message);
            Log.i(SMS_MESSAGE,"correct");

        }
    }
    class SmsAdapter extends BaseAdapter{
//        private View mView;/

        private LayoutInflater layoutInflater=getLayoutInflater();
        public SmsAdapter(Context context){
            layoutInflater=LayoutInflater.from(context);
        }


        @Override
        public int getCount() {
            return smsInfos.size();
        }

        @Override
        public Object getItem(int position) {
            return smsInfos.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //
            ViewHolder viewHolder;
            if (convertView==null){
                convertView=layoutInflater.inflate(R.layout.item,null);
                viewHolder=new ViewHolder();
                viewHolder.name=(TextView)convertView.findViewById(R.id.name);
                viewHolder.address=(TextView)convertView.findViewById(R.id.address);
                viewHolder.text=(TextView)convertView.findViewById(R.id.text);
                viewHolder.id=(TextView)convertView.findViewById(R.id.id);

                convertView.setTag(viewHolder);

            }viewHolder=(ViewHolder)convertView.getTag();

            viewHolder.name.setText(smsInfos.get(position).getName());
            viewHolder.address.setText(smsInfos.get(position).getAddress());
            viewHolder.text.setText(smsInfos.get(position).getText());
            viewHolder.id.setText(smsInfos.get(position).getId());
            return convertView;
        }
       public final class ViewHolder{
         public    TextView name;
           public TextView address;
            public  TextView text;
           public TextView id;


        }
    }


}

SmsInfo.class:

public class SmsInfo {
    private String name;
    private String address;
    private String text;
    private String id;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getText() {
        return text;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setText(String text) {
        this.text = text;
    }

    public void setName(String name) {
        this.name = name;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值