Android短信操作:发送、接收与拦截指南
需积分: 20 130 浏览量
更新于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 上传
2012-12-07 上传
2015-11-08 上传
2019-07-29 上传
2014-07-24 上传
2013-03-01 上传
2011-11-07 上传
2012-08-15 上传
flyboy2688
- 粉丝: 0
- 资源: 1
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能