android基础---->发送和接收短信
2023-09-27 14:20:11 时间
收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持。今天我们开始自己创建一个简单的发送和接收短信的应用。
目录导航
接收短信
项目的结构如下:一个简单的接收和发送短信的功能
一、定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为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(); } }
友情链接
相关文章
- android 三种定位方式
- Android多线程研究(1)——线程基础及源代码剖析
- 转- android硬件传感器
- Android代码入侵原理解析(一)
- Android基础总结(七)BroadcastReceiver
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
- Android之控件与布局,结构知识点,基础完结
- Android开发基础:利用 Android Studio开发看美女应用(4)
- 《Android深度探索(卷2):系统应用源代码分析与ROM定制》——第6章,第6.1节什么是Android系统应用
- 《Android NFC开发实战详解》——6.2节Android NFC P2P开发基础
- 《深入解析Android 虚拟机》——第2章 Java虚拟机基础 2.1虚拟机的作用
- 2019最新Android常用开源库总结(附带github链接)
- Android和H5交互-基础篇
- 深入理解Android 自定义attr Style styleable以及其应用
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
- Android 滑动效果基础篇(四)—— Gallery + GridView
- Android 网络框架之okhttp源码解析
- android UI进阶之用【转】
- Unity 基础 之 实现简单的Android移动端本地数据读取与写入封装(简单加密写入,解密读取 json 数据)
- Android Studio 基础 之 一个简单的 SplashActivity 实现
- ANDROID L——RecyclerView,CardView进口和使用(Demo)
- 轻松搞定表白女朋友:Android版APP (零基础也可前往Github免费下载软件)
- Android 属性动画
- Android 获取设备唯一标识