Android 监听SMS短信
当设备接收到一条新的SMS消息时,就会广播一个包括了android.provider.Telephony.SMS_RECEIVED动作的Intent。
注意,这个动作是一个字符串值,SDK 1.0不再包括对这个字符串的引用。因此,在你的应用程序中。你须要显式的指定它。
对于应用程序监听SMS Intent广播,首先须要加入RECEIVE_SMS权限。通过在应用程序manifest中加入一个uses-permission,如以下的片段所看到的:
<uses-permission android:name=”android.permission.RECEIVE_SMS”/>
SMS广播Intent包括了新来SMS的细节。为了提取包装在SMS广播Intent的Bundle中的SmsMessage对象数组,使用pdus key来提取SMS pdus数组。当中。每一个对象表示一个SMS消息。将每一个pdu字节数组转化成SmsMessage对象,调用SmsMessage.createFromPdu,传入每一个字节数组,如以下的片段所看到的:
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get(“pdus”);
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
每一个SmsMessage对象包括SMS 消息的细节,包括源地址(手机号),时间和消息体。
以下的样例演示了一个Broadcast Receiver实现了onReceive函数来检查新来的短信是否以@echo字符串開始。假设是,发送同样的文本给那个手机:
public class IncomingSMSReceiver extends BroadcastReceiver
{
private static final String queryString = “@echo “;
private static final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;
public void onReceive(Context _context, Intent _intent)
{
if (_intent.getAction().equals(SMS_RECEIVED))
{
SmsManager sms = SmsManager.getDefault();
Bundle bundle = _intent.getExtras();
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get(“pdus”);
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages)
{
String msg = message.getMessageBody();
String to = message.getOriginatingAddress();
if (msg.toLowerCase().startsWith(queryString))
{
String out = msg.substring(queryString.length());
sms.sendTextMessage(to, null, out, null, null);
}
}
}
}
}
}
为了监听短信,使用Intent Filter来注冊Broadcast Receiver,使其监听android.provider.Telephony.SMS_RECEIVED动作。如以下的片段所看到的:
final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;
IntentFilter filter = new IntentFilter(SMS_RECEIVED);
BroadcastReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);相关文章
- Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
- Android系统下载管理DownloadManager功能介绍及使用示例
- [Android Pro] 组件化:企业级大型项目必经之路
- android 活动监听是否点击某个view
- 【ANDROID游戏开发二十三】自定义LISTVIEW【通用】适配器并实现监听控件!
- Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听
- 转--Android学习笔记-实用代码合集
- Android App监听软键盘按键的三种方式(转)
- Android自动测试之Monkey工具
- android安卓应用和OBD的集成场景
- Android音视频开发学习路线+项目实战+源码解析(WebRTC Native 源码、X264源码、FFmpeg、Opus源码.....)
- Android修行手册 - 当Actviity弹出对话框的时候,监听返回Back键
- Android修行手册 - ScrollView示例和监听
- Android修行手册 - 官方SearchView使用/属性/监听
- 手把手教你Android全局触摸事件监听
- android检测usb存储,android 监听检测USB存储设备
- android系统电源管理
- Android Recyclerview监听滑动状态
- Android 实现Java更改ImageView的src属性
- 【Android笔记23】Android四大组件之Service服务介绍及生命周期
- android 11.0 12.0Settings去掉二级三级菜单搜索功能
- android 自定义圆形水波纹进度条
- Android 10.0 系统默认开启wifi
- android 10.0 SystemUI VolumeUI媒体音量设置为最大值80%
- android TV盒子开发遥控器按键的监听
- Android怎样监听蓝牙耳机的按键事件
- Android中Preference的使用以及监听事件分析
- Android手势监听类GestureDetector的使用
- 如何解决之Android Studio不能自动更新安装apk文件的问题
- Android JNI结构体和指针数组的使用以及调用Java类的方法和属性
- android如何查看cpu的占用率和内存泄漏
- Android如何监听蓝牙耳机的按键事件