五月的第三天,这次我给大家带来的是一个关于短信弹窗提示的爱屁屁,效果如下:
而需要完成对系统接收短信的监听,相关全权限的获取以及监听系统广播是必须实现的两个过程。
关于权限一块,android系统关于短信的相关权限如下所示:
<!-- 发送消息-->
<p><uses-permissionandroid:name="android.permission.SEND_SMS"/>
<!-- <wbr> 阅读消息-->
<uses-permissionandroid:name="android.permission.READ_SMS"/>
<!-- <wbr> 写入消息-->
<uses-permissionandroid:name="android.permission.WRITE_SMS" />
<!-- 接收消息 -->
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/></wbr></wbr></p>
而本次我们需要实现的是接收短信,所以需要打开相应的权限,其实还有一个短信回复的功能,该功能在这个Demo中我并没有实现,不过在指定部位我有代码备注,可以留给有兴趣的朋友添加相关代码进行实现,不过记得添加相关的权限。
其次是监听系统广播,广播接收需要添加Action,而系统接收短信广播发出的Action如下:
android.provider.Telephony.SMS_RECEIVED
这个Demo中我使用的是BroadcastReceiver的静态注册方式,在注册广播的时候我们给它加上这个Action即可。
完成以上两步,监控系统短信的基础条件就已经是满足了。完成了基础条件的配置,我们还需要的就是一个BroadcastReceiver用于接收系统广播并由它启动我们的窗口DialogActivity。BroadcastReceiver代码如下:
package com.mariostudio.broadcastreceiver;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.mariostudio.messagewatcher.DialogActivity;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class MessageReceiver extends BroadcastReceiver{
private static String MESSAGE_RECEIVER = "android.provider.Telephony.SMS_RECEIVED";
@SuppressLint("SimpleDateFormat") @Override
public void onReceive(Context context, Intent intent1) {
if(intent1.getAction().equals(MESSAGE_RECEIVER)){
Object pdus[] = (Object[]) intent1.getExtras().get("pdus");
for(Object object:pdus){
byte pdu[] = (byte[]) object;
SmsMessage message = SmsMessage.createFromPdu(pdu);
//获取短信的内容
String msmContent = message.getMessageBody();
//获取短信接收时间
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String msmDate =