发短息这一功能对于我们来说很容易,但是具体怎么实现的呢,现在我们可以利用BroadcastReceiver并实现输出发送者的电话号码,短信内容和发送时间对其进行类似监听效果。
首先,新建项目,相信初学者也会。而且这里不需要Activity,可以不用建Activity,但没有Activity时,它的包也隐藏了,所以可能会要重建包。
在这包里建类,如上图(让这个类继承BroadcastReceiver):这个类就是接收者
public class SMSLisener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Object[] pduses = (Object[]) intent.getExtras().get("pdus");// 获取短信
for (Object pdus : pduses) {
byte[] pdusmessage = (byte[]) pdus;
SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);//短信
String mobile = sms.getOriginatingAddress();//电话号码
String content = sms.getMessageBody();//短信内容
Date date = new Date(sms.getTimestampMillis());//日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendtime = simpleDateFormat.format(date);
System.out.println("mobile:" + mobile
+"\n"+ "内容:" + content +"\n"+ "发送时间:"
+ sendtime);//输出发送短信的手机号码,内容,时间
}
}
}
在AndroidManifest.xml中定义接收者(注意划线部分<U>,接收者名称和接收者类中必须一致):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.smslisener"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<receiver android:name=".SMSLisener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
</manifest>
完成所有步骤需要把项目部署到一个模拟器上,用另一模拟器对其发短信,发送成功时我们在控制台就能看见如下图的情况: