public class MessageContentObserver extends ContentObserver {
private Context mContext;
private Handler mHandler;
private String code;
public MessageContentObserver(Context context, Handler handler) {
super(handler);
mContext = context;
mHandler = handler;
}
/**
* 回调函数, 当监听的Uri发生改变时,会回调该方法
* 需要注意的是当收到短信的时候会回调两次
* 收到短信一般来说都是执行了两次onchange方法.第一次一般都是raw的这个.
* 虽然收到了短信.但是短信并没有写入到收件箱里
*/
@Override
public void onChange(boolean selfChange, Uri uri) {
if (uri.toString().equals("content://sms/raw")) {
return;
}
Uri inboxUri = Uri.parse("content://sms/inbox");
Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc"); // 按时间顺序排序短信数据库
if (c != null) {
if (c.moveToFirst()) {
String address = c.getString(c.getColumnIndex("address"));//发送方号码
String body = c.getString(c.getColumnIndex("body")); // 短信内容
if (!address.equals("10086")) {
return;
}
Pattern pattern = Pattern.compile("(\\d{6})");//正则表达式匹配验证码
Matcher matcher = pattern.matcher(body); if (matcher.find()) {
code = matcher.group(0);
Message msg = Message.obtain();
msg.what = MainActivity.MSG_RECEIVE_CODE;
msg.obj = code;
mHandler.sendMessage(msg);
}
}
c.close();
}
}
}
/**
* 短信验证码自动填写功能的实现
*/
public class MainActivity extends Activity {
public static final int MSG_RECEIVE_CODE = 1; //收到短信的验证码
private EditText codeEdt; //短信验证码的输入框
private MessageContentObserver messageContentObserver; //回调接口
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_RECEIVE_CODE) {
//设置读取到的内容
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
codeEdt = (EditText) findViewById(R.id.smsCode);
findViewById(R.id.send_sms_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
senSMSCode();
}
});
messageContentObserver = new MessageContentObserver(MainActivity.this, handler);
getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, messageContentObserver);
}
/**
* 取消注册
*/
@Override
protected void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(messageContentObserver);
}
private void senSMSCode() {
}
}
<!--读取短信的权限--> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS" />
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有