Android利用BroadcastReceiver实现短信监听

来源:互联网 发布:立思辰招聘java 编辑:程序博客网 时间:2024/05/08 05:16

MainActivity如下:

01package cc.testsmsbroadcastreceiver;
02import cc.testsmsbroadcastreceiver.SMSBroadcastReceiver.MessageListener;
03import android.os.Bundle;
04import android.widget.TextView;
05import android.app.Activity;
06/**
07 * Demo描述:
08 * 利用BroadcastReceiver实现监听短信
09 *
10 * 注意权限:
11 * <uses-permission android:name="android.permission.RECEIVE_SMS"/>
12 *
13 * 详细资料:
14 * http://blog.csdn.net/lfdfhl/article/details/8195400
15 *
16 */
17public classMainActivity extends Activity{
18    privateTextView mTextView;
19    privateSMSBroadcastReceiver mSMSBroadcastReceiver;
20    @Override
21    protectedvoid onCreate(Bundle savedInstanceState) {
22        super.onCreate(savedInstanceState);
23        setContentView(R.layout.main);
24        init();
25    }
26    privatevoid init(){
27        mTextView=(TextView) findViewById(R.id.textView);
28        mSMSBroadcastReceiver=newSMSBroadcastReceiver();
29        mSMSBroadcastReceiver.setOnReceivedMessageListener(newMessageListener() {
30            @Override
31            publicvoid OnReceived(String message) {
32                mTextView.setText(message);
33            }
34        });
35    }
36 
37}


SMSBroadcastReceiver如下:

01package cc.testsmsbroadcastreceiver;
02import java.text.SimpleDateFormat;
03import java.util.Date;
04import android.content.BroadcastReceiver;
05import android.content.Context;
06import android.content.Intent;
07import android.telephony.SmsMessage;
08/**
09 * 配置广播接收者:
10 *  <receiver android:name=".SMSBroadcastReceiver">
11 *     <intent-filter android:priority="1000">
12 *         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
13 *     </intent-filter>
14 *  </receiver>
15 
16 *  注意:
17 *  <intent-filter android:priority="1000">表示:
18 *  设置此广播接收者的级别为最高
19 */
20 
21public classSMSBroadcastReceiver extendsBroadcastReceiver {
22    privatestatic MessageListener mMessageListener;
23    publicSMSBroadcastReceiver() {
24        super();
25    }
26 
27    @Override
28    publicvoid onReceive(Context context, Intent intent) {
29             Object [] pdus= (Object[]) intent.getExtras().get("pdus");
30             for(Object pdu:pdus){
31                SmsMessage smsMessage=SmsMessage.createFromPdu((byte[])pdu);
32                String sender=smsMessage.getDisplayOriginatingAddress();
33                String content=smsMessage.getMessageBody();
34                longdate=smsMessage.getTimestampMillis();
35                Date timeDate=newDate(date);
36                SimpleDateFormat simpleDateFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
37                String time=simpleDateFormat.format(timeDate);
38                 
39                System.out.println("短信来自:"+sender);
40                System.out.println("短信内容:"+content);
41                System.out.println("短信时间:"+time);
42                 
43                mMessageListener.OnReceived(content);
44                 
45                //如果短信来自5556,不再往下传递
46                if("5556".equals(sender)){
47                    System.out.println(" abort ");
48                    abortBroadcast();
49                }
50                 
51             }
52    }
53     
54    // 回调接口
55        publicinterface MessageListener {
56            publicvoid OnReceived(String message);
57        }
58 
59        publicvoid setOnReceivedMessageListener(MessageListener messageListener) {
60            this.mMessageListener=messageListener;
61        }
62}


main.xml如下:

01<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
02    xmlns:tools="http://schemas.android.com/tools"
03    android:layout_width="match_parent"
04    android:layout_height="match_parent"
05     >
06 
07    <TextView
08        android:id="@+id/textView"
09        android:layout_width="wrap_content"
10        android:layout_height="wrap_content"
11        android:text="@string/hello_world"
12        android:layout_centerInParent="true"/>
13 
14</RelativeLayout>


AndroidManifest.xml如下:

查看源码打印?
01<?xmlversion="1.0"encoding="utf-8"?>
02<manifestxmlns:android="http://schemas.android.com/apk/res/android"
03    package="cc.testsmsbroadcastreceiver"
04    android:versionCode="1"
05    android:versionName="1.0">
06 
07    <uses-sdk
08        android:minSdkVersion="8"
09        android:targetSdkVersion="8"/>
10     
11    <uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
12     
13 
14    <application
15        android:allowBackup="true"
16        android:icon="@drawable/ic_launcher"
17        android:label="@string/app_name"
18        android:theme="@style/AppTheme">
19        <activity
20            android:name="cc.testsmsbroadcastreceiver.MainActivity"
21            android:label="@string/app_name">
22            <intent-filter>
23                <actionandroid:name="android.intent.action.MAIN"/>
24 
25                <categoryandroid:name="android.intent.category.LAUNCHER"/>
26            </intent-filter>
27        </activity>
28         
29        <receiverandroid:name=".SMSBroadcastReceiver">
30            <intent-filterandroid:priority="1000">
31                <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
32            </intent-filter>
33        </receiver>
34    </application>
35 
36</manifest>
原创粉丝点击