监听短信接收

1.Android系统在收到短信的时候会发送一条有序广播,我们如果定义一个接收者接收这个广播,就可以得到短信内容,也可以拦截短信

2.定义广播接收者接收广播android.provider.Telephony.SMS_RECEIVED

3.在onReceive方法内部调用Intent的getExtras()获取其中pdus字段,得到一个Object[],其中每一个元素都是一个byte[]

4. 通过SmsMessage类的createFromPdu方法创建SmsMessage对象

5.从SmsMessage对象中即可获取发送者号码、短信内容、发送时间等信息

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

7.Android系统中收到短信的通知是一个有序通知,我们如需拦截垃圾短信,可以配置较高的priority,收到信息进行判断是否abortBroadcast()

xml 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?> 
  
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  
      package="cn.test" 
  
      android:versionCode="1" 
  
      android:versionName="1.0"
  
    <application android:icon="@drawable/icon" android:label="@string/app_name"
  
        <activity android:name=".MainActivity" 
  
                  android:label="@string/app_name"
  
            <intent-filter
  
                <action android:name="android.intent.action.MAIN" /> 
  
                <category android:name="android.intent.category.LAUNCHER" /> 
  
            </intent-filter
  
        </activity
  
   
  
        <receiver android:name=".SmsReceiver"
  
            <intent-filter android:priority="999"
  
                <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"/> 
  
</manifest>

 

java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class SmsReceiver extends BroadcastReceiver { 
  
   
  
    public void onReceive(Context context, Intent intent) { 
  
        Object[] pdus = (Object[]) intent.getExtras().get("pdus"); 
  
        for (Object pdu : pdus) { 
  
               
  
            //创建一个短信 
  
            SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu); 
  
               
  
            //获取发送手机号 
  
            String address = sms.getOriginatingAddress(); 
  
               
  
            //获取短信的内容 
  
            String body = sms.getMessageBody(); 
  
               
  
            //获取短信的时间 
  
            String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sms.getTimestampMillis())); 
  
            System.out.println(time); 
  
            System.out.println(address); 
  
            System.out.println(body); 
  
        
  
        //中断手机接收操作 
  
        abortBroadcast(); 
  
    
  
}

 

 

 

 



来自为知笔记(Wiz)


posted on 2014-04-28 14:03  转折点人生  阅读(190)  评论(0)    收藏  举报