Android
- 首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了
- 在广播里面,我们重写的onReceive()方法,通过里面的Intent写到的Bundle就可以拿到短信的内容
- 清单文件里面我们必须要添加权限,否则无法接收到。
- 为了防止我们的广播接收不到,我们自己写的广播接收器的权限必须要大,以防万一,我设置了1000。
步骤详解:
- 定义一个广播接收器SmsReceiver,并继承
BroadcastReceiver
,同时重写onReceive()方法:
package com.nlte.phonesafe.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.telephony.SmsMessage;
import com.nlte.phonesafe.R;
public class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//判断广播消息
if (action.equals(SMS_RECEIVED_ACTION)){
Bundle bundle = intent.getExtras();
//如果不为空
if (bundle!=null){
//将pdus里面的内容转化成Object[]数组
Object pdusData[] = (Object[]) bundle.get("pdus");// pdus :protocol data unit :
//解析短信
SmsMessage[] msg = new SmsMessage[pdusData.length];
for (int i = 0;i < msg.length;i++){
byte pdus[] = (byte[]) pdusData[i];
msg[i] = SmsMessage.createFromPdu(pdus);
}
StringBuffer content = new StringBuffer();//获取短信内容
StringBuffer phoneNumber = new StringBuffer();//获取地址
//分析短信具体参数
for (SmsMessage temp : msg){
content.append(temp.getMessageBody());
phoneNumber.append(temp.getOriginatingAddress());
}
System.out.println("发送者号码:"+phoneNumber.toString()+" 短信内容:"+content.toString());
//可用于发命令执行相应的操作
/* if ("#*location*#".equals(content.toString().trim())){
abortBroadcast();//截断短信广播
}else if ("#*alarm*#".equals(content.toString().trim())){
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.guoge);
//播放音乐
mediaPlayer.start();
abortBroadcast();//截断短信广播
}else if ("#*wipe*#".equals(content.toString().trim())){
abortBroadcast();//截断短信广播
}else if ("#*lockscreen*#".equals(content.toString().trim())){
abortBroadcast();//截断短信广播
}*/
}
}
}
}
- 在AndroidManifest.xml注册广播接收器,并添加相应的权限:
2.1 注册广播接收器
<receiver android:name=".receiver.SmsReceiver">
<intent-filter android:priority="1000"> <!--优先级:-1000~1000,系统短信优先级为-1-->
<!--订阅广播事件类型-->
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
2.2 添加权限
<!--收短信的权限-->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<!--读取短信信息的权限-->
<uses-permission android:name="android.permission.READ_SMS"/>