分类: Java
2011-11-15 22:28:41
短消息是一个系统广播,所以我们需要在配置文件中填写相关的广播接收信息才能接收到系统短消息的广播通知,配置文件如下:
然后,编写继承了BroadCastReceiver的类,用来实现短信广播的接受:
01 < ?xml version="1.0" encoding="utf-8"?>
02 < manifest xmlns:Android=""
03 package="com.qlf.test" android:versionCode="1" android:versionName="1.0">
04 < application android:icon="@drawable/icon" android:label="@string/app_name">
05 < activity android:name=".mainActivity" android:label="@string/app_name">
06 < intent-filter>
07 < action android:name="android.intent.action.MAIN" />
08 < category android:name="android.intent.category.LAUNCHER" />
09 < /intent-filter>
10 < /activity>
11
12 < !--接受短消息需要注册的receiver,其中的android:name是继承了BroadCastReceiver的类的位置
13 android:priority="100" 指定了接收器的级别,这里设置的值比系统的值要高,这意味着程序的接受
14 短消息要早于系统接受短消息,这也就给我们提供了拦截短消息,不让系统发出短消息提示的机会。
15 -->
16 < receiver android:name=".SmsBroadCast">
17 < intent-filter android:priority="100">
18 < action android:name="android.provider.Telephony.SMS_RECEIVED" />
19 < /intent-filter>
20 < /receiver>
21
22
23 < /application>
24 < uses-SDK android:minSdkVersion="8" />
25 < uses-permission android:name="android.permission.RECEIVE_SMS" />
26 < /manifest>
01 public class SmsBroadCast extends BroadcastReceiver
02 {
03
04 @Override
05 public void onReceive(Context arg0, Intent arg1)
06 {
07 String dString = SmsHelper.getSmsBody(arg1);
08 String address = SmsHelper.getSmsAddress(arg1);
09
10
11 //阻止广播继续传递,如果该receiver比系统的级别高,
12 //那么系统就不会收到短信通知了
13 abortBroadcast();
14 }
15 }
随后再看看上面的SmsHelper类是如何实现短信的接收工作的。你也不要问我为什么是这么接收的,因为API就是这么用的,照办就是了:01 import android.content.Intent;
02 import android.os.Bundle;
03 import android.telephony.SmsMessage;
04
05 /**
06 * 短信帮助类
07 *
08 * @author qianlifeng 2011-3-14
09
*/
10 public class SmsHelper
11 {
12 /**
13 * 获得短信内容
14 * */
15 public static String getSmsBody(Intent intent)
16 {
17 String tempString = "";
18 Bundle bundle = intent.getExtras();
19 Object messages[] = (Object[]) bundle.get("pdus");
20 SmsMessage[] smsMessage = new SmsMessage[messages.length];
21 for (int n = 0; n < messages.length; n++)
22
23 smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
24 //短信有可能因为使用了回车而导致分为多条,所以要加起来接受
25 tempString += smsMessage[n].getDisplayMessageBody();
26 }
27 return tempString;
28
29
30 /**
31 * 获得短信地址
32 * */
33 public static String getSmsAddress(Intent intent)
34 {
35
接上页
36 Object messages[] = (Object[]) bundle.get("pdus");
37 return SmsMessage.createFromPdu((byte[]) messages[0]).getDisplayOriginatingAddress();
38 }
39 }