android基础---->发送和接收短信

  收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持。今天我们开始自己创建一个简单的发送和接收短信的应用。

 

目录导航

  1.   接收短信
  2.   发送短信
  3.   友情链接

 

接收短信

项目的结构如下:一个简单的接收和发送短信的功能

一、定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的所有数据。

// 接收短信的广播
class MessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus"); // 提取短信消息
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < messages.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        }
        String address = messages[0].getOriginatingAddress(); // 获取发送方号码
        String fullMessage = "";
        for (SmsMessage message : messages) {
            fullMessage += message.getMessageBody(); // 获取短信内容
        }
        textView.setText("address; " + address + ", message: " + fullMessage);
        abortBroadcast();
    }
}

二、 注册广播,这里我们动态在代码中注册:

// 注册接收广播
IntentFilter intentFilter1 = new IntentFilter();
intentFilter1.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
intentFilter1.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver = new MessageReceiver();
registerReceiver(messageReceiver, intentFilter1);

 三、 声明权限:

<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

 

发送短信

一、 发送短信:用getDefault方法得到SmsManager对象,调用sendTextMessage方法发送短信

// 发送短信
public void send(View view) {
    SmsManager smsManager = SmsManager.getDefault();
    String destinationAddress = "15527100207";
    String text = "我爱你!";

    Intent intent1 = new Intent(SENT_SMS_ACTION);
    PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, intent1, 0);
    Intent intent2 = new Intent(DELIVERY_SMS_ACTION);
    PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, intent2, 0);
    smsManager.sendTextMessage(destinationAddress, null, text, sentIntent, deliveryIntent); // aidl服务,进程间的通信
}

 我们具体了解一下sendTextMessage方法一个参数的含义:

public void sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress:  // 目的地,也就是对方的手机号
scAddress:          // 服务中心地址,为空的话就是默认的SMSC
text:               // 发送消息的具体内容
sentIntent:         // 当消息成功或者失败发送时,就发起这个广播
deliveryIntent:     // 当消息到达目的地时,就发起这个广播

三、 sentIntent的广播:

// 发送短信的状态广播
class MessageBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 一个10位数的号码发送,也能成功,但是对方没有接收短信。
        if (getResultCode() == RESULT_OK) {
            Toast.makeText(MainActivity.this, "发送成功!", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "发送失败!", Toast.LENGTH_SHORT).show();
        }
    }
}

四、 deliveryIntent的广播:

// 当消息被传递给收件人时 
class DeliveryBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(MainActivity.this, "对方接收短信成功!", Toast.LENGTH_SHORT).show();
    }
}

 

友情链接

 

转载于:https://www.cnblogs.com/huhx/p/sendMessage.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android接收,可以使用 BroadcastReceiver。以下是一个简单的示例: 1. 创建一个类来扩展 BroadcastReceiver: ``` public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在此处处理接收到的 } } ``` 2. 在 AndroidManifest.xml 文件中注册 BroadcastReceiver: ``` <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application> <receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> ``` 3. 在 onReceive() 方法中处理接收到的: ``` @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null) { for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu); String messageBody = smsMessage.getMessageBody(); String phoneNumber = smsMessage.getOriginatingAddress(); // 在此处处理内容和发送者号码 } } } } } ``` 请注意,要接收,您需要在 AndroidManifest.xml 文件中声明 RECEIVE_SMS 权限。此外,从 Android 4.4 KitKat 开始,只有默认应用程序才能接收到 SMS_RECEIVED 意图。如果您的应用程序不是默认应用程序,则可以使用 SMS Retriever API 来接收

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值