Android 广播获取短信内容
一、创建广播监听短信接收器
public BroadcastReceiver borad = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//super.onReceive(context, intent);
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Log.v(TAG, ">>>>>>>onReceive start");
// 第一步、获取短信的内容和发件人
StringBuilder body = new StringBuilder();// 短信内容
StringBuilder number = new StringBuilder();// 短信发件人
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage
.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
String curNumber = number.toString();
if (!curNumber.equals(currentMessage
.getDisplayOriginatingAddress()))
number.append(currentMessage
.getDisplayOriginatingAddress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
if (smsNumber.startsWith("+86")) {
smsNumber = smsNumber.substring(3);
}
// 第二步:确认该短信内容是否满足过滤条件
if (smsNumber.equals("11888") || smsNumber.equals("1069030011888"))
Log.v(TAG, "sms_number.equals(11888)" + smsBody);
int index = smsBody.indexOf("您本次操作的验证码为:");
if (index != -1){
String smsCode = smsBody.substring(index + 11,index + 17);
//authCode.setText(smsCode);
Message msg = new Message();
msg.what = SMSCODE_OK;
msg.obj = smsCode;
handler.sendMessage(msg);
}
}
}
Log.v(TAG, ">>>>>>>onReceive end");
}
}
};
二、注册广播
/**
* 注册接收短信广播
*/
private void regeditBroad(Context context){
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
context.registerReceiver(borad, intentFilter);
}
三、Handler操作UI控件
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
// 自动填充短信验证码
case SMSCODE_OK:
String sms = (String) msg.obj;
System.out.println("截取到短信验证码: " + sms);
if (sms != null && !sms.equals("")) {
authCode.setText(sms);
getSms.setEnabled(true);
getSms.setText(mcontext.getString(R.string.m_hint_obtain));
}
//注销接收短信广播
destoryBroad();
break;
}
}
}
/**
* 销毁短信广播
*/
private void destoryBroad() {
if (borad != null) {
mcontext.unregisterReceiver(borad);
}
}
注:需要在AndroidMainftest加入<uses-permission android:name="android.permission.READ_SMS" />
相关推荐
`cursor`对象将包含所有短信的记录,你可以通过遍历它来获取短信内容,例如短信的发送者、接收者、时间、内容等字段。 接着,我们讨论如何实现实时刷新短信内容。Android提供了BroadcastReceiver,可以监听系统广播...
查询完成后,可以遍历Cursor对象获取短信内容: ```java while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("_id")); String threadId = cursor.getString(cursor.getColumnIndex(...
Android 广播监听短信并显示内容是指在 Android 应用程序中,使用广播监听来监控和处理短信,获取短信内容并将其显示出来。本文将详细介绍如何使用 Android 广播监听来监听短信,并获取短信内容。 一、Android 广播...
2、从获得的内容中解析出短信发送者和短信内容 3、在Activity中注册广播 4、添加接收短信权限 下面放上具体的代码 activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version=1.0 encoding=...
这个"Android高级应用源码-广播监听短信并获取短信内容.zip"的项目,显然涉及到如何通过自定义的BroadcastReceiver来监听并处理短信相关的事件。以下是关于这个主题的详细知识点: 1. **BroadcastReceiver基础**: ...
开发者可以在该方法中获取短信内容,然后进行相应的处理。onReceive()方法的代码结构通常如下: public class SMSBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context ...
当系统收到短信时,会发出一个action名称为android.provider.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使用名称“pdus”即可从Intent中获取短信内容。最好使用动态注册的方法,去注册...
在这个"安卓短信彩信相关-广播监听短信并获取短信内容.rar"的压缩包中,我们可以看到开发者提供了关于如何监听和获取短信内容的示例代码。下面将详细解释相关的核心概念和技术。 首先,短信监听是通过实现Android...
综上所述,实现“Android即时读取短信内容”功能,主要涉及权限管理、广播接收器的创建与注册、短信数据的解析以及业务逻辑处理。通过这个小Demo,开发者可以了解如何在Android应用中集成这一功能,提升用户体验。
【Android开发获取短信内容并截取短信】 在Android开发中,获取短信内容并截取短信涉及到以下几个关键知识点: 1. **广播接收器(BroadcastReceiver)**:在Android中,广播接收器是一种重要的组件,用于监听系统...
在这种情况下,用户可能需要手动在设置中关闭这些限制,或者使用其他方式(如通过ContentObserver监听ContentResolver的改变)来获取短信信息。 在实际应用中,我们还需要考虑多线程问题,因为onReceive()方法是在...
// 获取短信内容和发送者信息 Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage....
在这个方法里,我们将对Intent进行解析,以获取短信的相关信息。 ```java public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ...
这个压缩包文件“Android高级应用源码-android仿淘宝,自动获取短信验证码 demo.rar”提供了一个Android应用程序的示例,该程序模拟了淘宝应用中的一个重要功能:自动获取短信验证码。这个功能在许多移动应用中用于...
在`onReceive`方法中,我们可以获取到短信内容,并根据需求进行处理,比如判断是否拦截或删除。这通常涉及到对`PduBroadcaster`的使用,它能解析接收到的PDU(Protocol Data Unit)数据,转化为`SmsMessage`对象: ...
在提供的源码中,可能包含了广播接收器的创建、注册、IntentFilter的设置以及onReceive()方法的实现等内容,通过分析这些代码,你可以深入理解Android广播接收器的工作原理和用法。如果源码包含了一些特殊功能或优化...
// 获取短信的发送者、内容和发送时间 String sender = mge.getDisplayOriginatingAddress(); String content = mge.getMessageBody(); Date date = new Date(mge.getTimestampMillis()); SimpleDateFormat ...
在这里,`phoneNumber`是接收方的电话号码,`message`是短信内容。`sendPendingIntent`和`deliveryPendingIntent`是用于监听发送和送达状态的意图。它们通常会绑定到BroadcastReceiver,当短信发送成功或失败时,...
例如,使用`content://sms/inbox` Uri可以获取收件箱中的短信,通过`cursor.getCount()`判断未读短信的数量,再通过`cursor.getString(cursor.getColumnIndex("body"))`获取短信正文。 接下来,ListView下拉刷新是...