android应用程序监听SMS Intent广播

当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent。

 

对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限。通过在应用程序manifest中添加一个uses-permission,如下面的片段所示:

<uses-permission android:name=”android.permission.RECEIVE_SMS”/>

AndroidManifest.xml代码:

 

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="cn.tbx.sms"

      android:versionCode="1"

      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

		<receiver android:name=".SMSBroadcastReceiver">

			<intent-filter>

				<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

			</intent-filter>

		</receiver>



    </application>

    <uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->

 <!-- 访问网络的权限 -->

<uses-permission android:name="android.permission.INTERNET"/>

</manifest>

SMSBroadcastReceiver.java的源码:

 

 

package cn.itcast.sms;



import java.sql.Date;

import java.text.SimpleDateFormat;

import java.util.HashMap;

import java.util.Map;



import cn.itcast.utils.SocketHttpRequester;



import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.SmsMessage;

import android.util.Log;



public class SMSBroadcastReceiver 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());//得到发送短信具体时间

			//2009-10-12 12:21:23

			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//为实践设置格式

			String sendtime = format.format(date);

			.....

		}

	}



}

每个SmsMessage对象包含SMS 消息的细节,包括源地址(手机号),时间和消息体。

然后你就可以实现自己的操作了。

具体是怎么实现的广播后面会具体分析。 

你可能感兴趣的:(android)