Android短信操作:发送、接收与拦截指南
需积分: 20 188 浏览量
更新于2024-09-11
收藏 36KB DOC 举报
"这篇博客主要介绍了在Android平台上如何进行文本短信和数据短信的发送、接收以及拦截的操作。"
在Android系统中,短信功能是应用程序与用户或其他设备进行通信的重要方式。下面将详细讲解如何实现这些功能。
首先,发送文本短信非常简单。在Android中,我们需要在`AndroidManifest.xml`文件中添加`SEND_SMS`权限:
```xml
<uses-permission android:name="android.permission.SEND_SMS" />
```
然后,在代码中,我们可以使用`SmsManager`类来发送短信。以下是一个示例:
```java
SmsManager smsMgr = SmsManager.getDefault();
Intent sentIntent = new Intent("com.myself.action.SMS_SEND_RESULT");
PendingIntent dummySentEvent = PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent, 0);
Intent deliveryIntent = new Intent("com.myself.action.SMS_DELIVERY_RESULT");
PendingIntent dummyDeliveryEvent = PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent, 0);
try {
smsMgr.sendTextMessage(telNumStr, null, SmsTextStr, dummySentEvent, dummyDeliveryEvent);
} catch (Exception e) {
Log.e("SmsSending", "SendException", e);
}
```
这里,`telNumStr`是接收方电话号码,`SmsTextStr`是短信内容,`sentIntent`和`deliveryIntent`用于监听发送和送达的状态。
对于发送数据短信(也称为PDU或二进制短信),过程类似,但需要额外处理短信的编码和解码。由于数据短信通常涉及更复杂的格式,如GSM 7位编码或UCS-2编码,因此可能需要使用`SmsManager`的其他方法,例如`divideMessage()`和`sendMultipartTextMessage()`。然而,示例中的代码并未给出完整的数据短信发送流程,通常会涉及到创建一个`ArrayList`来存储每部分的编码数据,并调用`SmsManager`的`sendDataMessage()`方法。
至于短信的接收,可以通过创建一个`BroadcastReceiver`来实现。在`AndroidManifest.xml`中注册`BroadcastReceiver`,并指定`SMS_RECEIVED`动作:
```xml
<receiver android:name=".MySmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
```
然后在`MySmsReceiver`类中,重写`onReceive()`方法以处理接收到的短信。
```java
public class MySmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
// 处理接收到的短信
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
for (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String messageBody = smsMessage.getMessageBody();
String sender = smsMessage.getDisplayOriginatingAddress();
// 进行其他处理...
}
}
}
}
}
```
最后,要实现短信拦截,可以创建一个系统级别的`BroadcastReceiver`,并在`AndroidManifest.xml`中使用`android:priority`属性设置较高的优先级。拦截器需要在接收到短信后决定是否转发到默认的`SMS_RECEIVED`广播。请注意,这种做法需要用户授予自定义权限,且可能受到Android版本和设备制造商的限制。
Android平台提供了丰富的API来处理短信功能,包括发送、接收和拦截。开发人员可以根据需求灵活运用这些API来实现各种短信相关的功能。
2020-09-01 上传
2011-12-12 上传
2015-11-08 上传
2023-11-04 上传
2023-03-16 上传
2024-10-09 上传
2023-05-14 上传
2023-09-01 上传
2023-05-26 上传
flyboy2688
- 粉丝: 0
- 资源: 1
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫