Android笔记 如何获取短信实时内容

很多商城app中注册时都需要验证码进行注册,并且自动获取手机短信的验证码。当来短信时我们要获取短信中的验证码,如何获取验证码呢?
首先我们得对短信进行监听,然后获取短信的内容然后用正则表达式取出我们需要的的验证码。

我们先看看如何获取短信的内容:手机的通讯录信息,短信信息都是存放在ContentProvider中。
我们要对短信进行监听的话要用到内容观察者ContentObserver如果对ContentObserver不了解的话点击这里右转
http://blog.csdn.net/qinjuning/article/details/7047607
我们自己继承ContentObserver来实现对短信的监听。对短信读取记得加权限


直接上代码

package com.example.demoobsever;

import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView vSms;//短信内容TextView
    private SMSContent smsObsever;//短信观察者

    private Handler handler =new Handler(){
        public void handleMessage(android.os.Message msg) {
            Bundle bundle=msg.getData();
            String body=bundle.getString("body");
            vSms.setText(body);
        };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vSms=(TextView) this.findViewById(R.id.tx_sms);//短信内容显示
        smsObsever=new SMSContent(handler);//实例化短信观察者
    //注册短信观察者
            getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsObsever);
    }
    /**
     * @description 短信观察者
     * @author Administrator
     *
     */
    class SMSContent extends ContentObserver {
        private Handler mHandler;
        public SMSContent(Handler handler) {
            super(handler);
            mHandler=handler;
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Cursor cursor = null;
            String body=null;
            try {
                cursor = getContentResolver().query(
                        Uri.parse("content://sms/inbox"), null, null, null,
                        "date desc");
                if(cursor!=null){
                    if(cursor.moveToNext()){//不遍历只拿当前最新的一条短信
                        //获取当前的短信内容
                        body=cursor.getString(cursor.getColumnIndex("body"));
                        Message msg=Message.obtain();
                        Bundle bundle=new Bundle();
                        bundle.putString("body", body);
                        msg.setData(bundle);
                        mHandler.sendMessage(msg);
                    }

                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(cursor!=null){
                    cursor.close();
                }

            }
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册
        getContentResolver().unregisterContentObserver(smsObsever);
    }
}

这是获取短信内容,获取验证码用Pattern去匹配即可。这里就不多介绍了。

你可能感兴趣的:(android笔记)