我們知道,只需通過代碼就可以讀到收件箱中的短信,發件箱中的短信;但是卻沒辦法在短信發來的瞬間獲取;如果我們在短信發來的一瞬間能得到相應的信息內容,那麼我們就可以依次來展開很多應用了——也就是通過短信去遠程操作一部手機。
如果想實時獲取,就需要調用receiver了,寫一個監聽類,這樣我們就可以實時獲取短息信息了。
還是來看看代碼吧。
首先,我們需要創建一個監聽類SMSBroadcastReceiver,讓他去繼承BroadcastReceiver。
再來初始化一個常量ACTION,並賦短信相關參數值。
- Android.provider.Telephony.SMS_RECEIVED
接著創建onReceive方法。
然後用getAction去監聽手機短信相關動態,利用StringBuffer來保存短信信息。
再然後主要代碼了。
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(ACTION)) {
- 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());
- }
- }
- }
- }
代碼中的SMSAddress為發送短信的號碼,SMSContent為短信內容。
要想看到是否成功獲取,最簡單的方法就是把這兩個參數打印出來。
- System.out.println("發送號碼:" + SMSAddress + "\n" + "短信內容:"
- + SMSContent);
不過要把他們加入for循環中,因為當新信息發來時,SMSAddress和SMSContent將被替換。
因此如果要是做應用時,也是在for循環中判斷的。
最後要記得在Manifest.xml中注冊監聽器。
- <receiver android:name="cn.etzmico.SMSBroadcastReceiver">
- <intent-filter>
- <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
- </intent-filter>
- </receiver>
同時要加上權限。
- <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
這樣,我們運行程序後,只要有短信接收,SMSAddress和SMSContent就會被賦值。
(System.out後就另當別論了!)
Android短信應用——短信信息實時獲取工程源碼下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/Android源碼集錦/2011年/10月/Android短信應用——短信信息實時獲取源碼/