《第一行代码-Android》学习笔记(十五)
来源:互联网 发布:知乎 德昌路 编辑:程序博客网 时间:2024/06/11 02:03
1.接收短信:采用广播直接,注册一个广播接收器,接收系统的android.provider.Telephoney.SMS_RECEIVED的广播,这条广播里会携带着相关的多有数据;
a) 在广播接收器的receiver()方法中解析数据:
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
//使用pdu秘钥来提取一个SMS pdus数组,其中每一个pdu都表示一跳短信消息。
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i = 0; i < messages.length; i++)
{
//使用createFromPdu方法将每一个pdu字节数组转换成SmsMessage对象。
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
String address = messages[0].getOriginatingAddress();// 获取发送方号码
String fullMessage = "";
for(SmsMessage smsMessage : messages)
{
//将每个SmsMessage对象中的短信内容拼接起来就是一条完整的短信了。
fullMessage += smsMessage.getMessageBody();
}
fromTv.setText(address);
contentTv.setText(fullMessage);
}
b) 需要注册一个权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
2.拦截短信:系统发出的短信广播是一条有序广播,利用之前学习的有序广播知识,可以很轻松的拦截短息广播
a) filter.setPriority(100);设置广播接收器的接收等级
b) abortBroadcast();在onreceiver中加入此方法,拦截广播
c) 拦截系统短息广播这个功能要慎用。防止拦截了重要信息
3. 发送短信:
a) 如何发送短信:
SmsManager smsManager = SmsManager.getDefault();
//加入PendingIntent的目的是为了能够捕捉短信是否发送成功,这里会延迟执行一个广播
PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent("SEND_SMS_ACTION"), 0);
smsManager.sendTextMessage(toEt.getText().toString(), null, contentEt.getText().toString(), pi, null);
b) 加入检测模拟器是否发送成功的广播接收器
// 注册监听短息是否发送成功的广播
IntentFilter sendFilter = new IntentFilter("SEND_SMS_ACTION");
sendSmsBroadcastReceiver = new SendSmsBroadcastReceiver();
registerReceiver(sendSmsBroadcastReceiver, sendFilter);
class SendSmsBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if(getResultCode() == RESULT_OK)
{
Toast.makeText(context, "Send success", 1).show();
}
else
{
Toast.makeText(context, "Send fail", 1).show();
}
}
}
4.SmsManager还有一个sendMultipartTextMessage()方法,可以实现将长度超过160字的短信分割。
- 《第一行代码-Android》学习笔记(十五)
- 《第一行代码-Android》学习笔记(二十五)
- Android第一行代码学习笔记总结
- 《Android第一行代码》学习笔记
- 《Android第一行代码》学习笔记
- FrameLayout《第一行代码Android》学习笔记
- Android第一行代码学习笔记
- Android学习笔记_《第一行代码》
- 《第一行代码》Android 学习笔记
- 《第一行代码 Android》学习笔记1
- 《第一行代码-Android》学习笔记(一)
- 《第一行代码-Android》学习笔记(二)
- 《第一行代码-Android》学习笔记(三)
- 《第一行代码-Android》学习笔记(四)
- 《第一行代码-Android》学习笔记(五)
- 《第一行代码-Android》学习笔记(六)
- 《第一行代码-Android》学习笔记(七)
- 《第一行代码-Android》学习笔记(八)
- Java中的两种GC方式
- Git常用命令总结
- 新年来临之际,一点小小的决心和感悟
- android.content.res.Resources$NotFoundException: String resource ID异常总结
- 《第一行代码-Android》学习笔记(十四)
- 《第一行代码-Android》学习笔记(十五)
- 安装python问题
- 《第一行代码-Android》学习笔记(十六)
- Android listview viewpager解决冲突 滑动
- 《第一行代码-Android》学习笔记(十七)
- kali linux 解决风扇猛转
- 浏览器内javascript 转换gbk文本到UTF8编码(chrome, firefox only)
- NYOJ 题目948 Max Gcd(技巧)
- uva 11825(dp + 状态压缩)