Android开发之自动填写短信验证码

Android开发之自动填写短信验证码

在Android的日常开发中,少不了编写带有注册和登录功能的App,而且现在大部分的注册信息都需要短信验证码,那我们如何实现自动填写短信验证码功能呢,莫要捉急,经本人研究,现已实现,现将代码贴出,望各位大神批评指正,不喜勿喷,谢谢O(∩_∩)O谢谢!

其实呢,想要实现这个功能很简单,我们只需要定义一个内容观察者,让其帮我们短信的状态,千万要记得加权限哦!

下面我们废话少说,直接上代码了:

核心代码:
MainActivity:
package apps.flying.testfillverificationcodeautomatically;


import android.content.ContentResolver;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.TextView;


import apps.flying.testfillverificationcodeautomatically.observer.SMSObserver;


public class MainActivity extends ActionBarActivity {


    public static final int GETCODESUCCCESSFUL = 1;
    private TextView tv;
    private ContentResolver resolver;
    private SMSObserver smsObserver;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int what = msg.what;
            if (what == GETCODESUCCCESSFUL) {
                String code = (String) msg.obj;
                tv.setText(code);
            }
        }
    };




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        initView();
        initData();
    }


    private void initView() {
        tv = (TextView) findViewById(R.id.tv);
    }


    private void initData() {
        smsObserver = new SMSObserver(MainActivity.this, mHandler);
        Uri uri = Uri.parse("content://sms");
        resolver = getContentResolver();
        resolver.registerContentObserver(uri, true, smsObserver);
    }


    @Override
    protected void onPause() {
        super.onPause();
        resolver.unregisterContentObserver(smsObserver);
    }
}

SMSObserver:
package apps.flying.testfillverificationcodeautomatically.observer;


import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


import apps.flying.testfillverificationcodeautomatically.MainActivity;


public class SMSObserver extends ContentObserver {


    private Context mContext;
    private Handler mHandler;


    public SMSObserver(Context context, Handler handler) {
        super(handler);
        this.mContext = context;
        this.mHandler = handler;
    }


    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);
        Log.d("SMSObserver", "短信内容发生变化");


        if (uri.toString().equals("content://sms/raw")) {
            return;
        }


        String code = "";
        Uri mUri = Uri.parse("content://sms");
        Cursor cursor = mContext.getContentResolver().query(mUri, null, null, null, "date desc");
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                String address = cursor.getString(cursor.getColumnIndex("address"));
                String body = cursor.getString(cursor.getColumnIndex("body"));


                Log.d("SMSObserver", "发件人为:" + address + "  " + "短信内容为:" + body);


                Pattern mPattern = Pattern.compile("(\\d{6})");
                Matcher matcher = mPattern.matcher(body);
                if (matcher.find()) {
                    code = matcher.group(0);
                    mHandler.obtainMessage(MainActivity.GETCODESUCCCESSFUL, code).sendToTarget();
                }
            }
            cursor.close();
        }
    }
}

Ok,代码已贴出,正所谓取之于社会,回报于社会,还望各位大神批评指正,不喜勿喷,灰常感谢,O(∩_∩)O哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值