Android短信操作:发送、接收与拦截指南

需积分: 20 11 下载量 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来实现各种短信相关的功能。