当我们注册一个app时会有短信发过来,然后把短信直接读取到登录界面的账号和密码,这样用户可以直接点击登录就好。这篇博客是我在准备这个功能时参考网络上的博客写出来的小demo。希望能对大家有所帮助。
利用广播读取即时收到的短信,将内容打印到logcat中。
步骤:
①加上权限:(收发短信必须要有的权限)
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.READ_SMS" >
</uses-permission>
②注册广播:
<receiver android:name="com.Synthia.androidrecivemessage.Message_Receiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
③写广播接收器:
public class Message_Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out
.println("Synthia-----The BroadcastReceiver of message is starting working。。。");
if (intent.getAction()
.equals("android.provider.Telephony.SMS_RECEIVED")) {
StringBuffer SMSAddress = new StringBuffer();
StringBuffer SMSContent = new StringBuffer();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObjects = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObjects.length];
for (int i = 0; i < pdusObjects.length; i++) {
messages[i] = SmsMessage
.createFromPdu((byte[]) pdusObjects[i]);
}
for (SmsMessage message : messages) {
SMSAddress.append(message.getDisplayOriginatingAddress());
SMSContent.append(message.getDisplayMessageBody());
}
System.out.println("The phone number of this message is::::"
+ SMSAddress + "\n"
+ "The detail of your message is:::" + SMSContent);
} else {
Toast.makeText(context, "还未收到短信,请稍等", Toast.LENGTH_SHORT)
.show();
}
}
}
}
④在需要的界面中启动广播:
Intent intent = new Intent();
intent.setAction("android.provider.Telephony.SMS_RECEIVED");
sendBroadcast(intent);
⑤在logcat中打印的如图。