隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2010年9月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1973496
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          《Android/OPhone開發完全講義》連載(8):收到短信了,我該做點什么?

          本文為《Android/OPhone開發完全講義》一書的內容連載。轉載請注明出處

              短信是手機中經常使用到的一種服務。然而,當手機接收到短信時,也會向系統發送廣播。如果我們的應用程序要在手機接收到短信后做點什么,那就需要接收這個系統廣播。
          接收系統廣播的步驟我們已經熟悉了,下面就按步就班地來完成這兩個步驟。
          1.編寫一個SMSReceiver類來接收系統廣播。

          package net.blogjava.mobile.sms;

          import android.content.BroadcastReceiver;
          import android.content.Context;
          import android.content.Intent;
          import android.os.Bundle;
          import android.telephony.gsm.SmsMessage;
          import android.widget.Toast;

          public class SMSReceiver extends BroadcastReceiver
          {
              @Override
              
          public void onReceive(Context context, Intent intent)
              {
                  
          //  判斷接收到的廣播是否為收到短信的Broadcast Action
                  if ("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction()))
                  {
                      StringBuilder sb 
          = new StringBuilder();
                      
          // 接收由SMS傳過來的數據
                      Bundle bundle = intent.getExtras();
                      
          // 判斷是否有數據
                      if (bundle != null)
                      {
                          
          //  通過pdus可以獲得接收到的所有短信消息
                          Object[] objArray = (Object[]) bundle.get("pdus");
                          
          //  構建短信對象array,并依據收到的對象長度來創建array的大小
                          SmsMessage[] messages = new SmsMessage[objArray.length];
                          
          for (int i = 0; i < objArray.length; i++)
                          {
                              messages 
          = SmsMessage.createFromPdu((byte[]) objArray);
                          }
                          
          //  將送來的短信合并自定義信息于StringBuilder當中
                          for (SmsMessage currentMessage : messages)
                          {
                              sb.append(
          "短信來源:");
                              
          // 獲得接收短信的電話號碼
                              sb.append(currentMessage.getDisplayOriginatingAddress());
                              sb.append(
          "\n------短信內容------\n");
                              
          // 獲得短信的內容
                              sb.append(currentMessage.getDisplayMessageBody());
                          }
                      }
                      Intent mainIntent 
          = new Intent(context, Main.class);
                      mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            
                      context.startActivity(mainIntent);
                      
          //  使用Toast信息提示框顯示接收到的短信內容
                      Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
                  }
              }
          }

          在編寫SMSReceiver類時需要注意如下4點:
          • 接收短信的Broadcast Action是android.provider.Telephony.SMS_RECEIVED,因此,要在onReceiver方法的開始部分判斷接收到的是否是接收短信的Broadcast Action。
          • 需要通過Bundle.get("pdus")來獲得接收到的短信消息。這個方法返回了一個表示短信內容的數組。每一個數組元素表示一條短信。這就意味著通過Bundle.get("pdus")可以返回多條系統接收到的短信內容。
          • 通過Bundle.get("pdus")返回的數組一般不能直接使用,需要使用SmsMessage.createFromPdu方法將這些數組元素轉換成SmsMessage對象才可以使用。每一個SmsMessage對象表示一條短信。
          • 通過SmsMessage類的getDisplayOriginatingAddress方法可以獲得發送短信的電話號碼。通過getDisplayMessageBody方法可以獲得短信的內容。
          2.  在AndroidManifest.xml文件中配置SMSReceiver類,代碼如下:

          <receiver android:name="SMSReceiver">            
              
          <intent-filter>
                  
          <!--  指定SMSReceiver可以接收的Broadcast Action  -->
                  
          <action android:name="android.provider.Telephony.SMS_RECEIVED" />
              
          </intent-filter>
          </receiver>

              為了使應用程序可以成功地接收SMS_RECEIVED廣播,還需要使用<uses-permission>標簽為應用程序打開接收短信的權限,代碼如下:

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

              現在啟動應用程序,界面上會顯示“等待接收短信...”的信息。那么這里還有一個問題。如果我們在模擬器上測試這個程序呢?
              解決這個問題并不難,Android模擬器不僅可以模擬程序的運行,還可以模擬手機的很多動作,例如,發短信就是其中之一。要模擬手機的動作,仍然要求助于DDMS透視圖。在DDMS透視圖中有一個【Emulator Control】視圖(如果DDMS中沒有這個視圖,請讀者通過Eclipse的【Window>Show View】菜單項來顯示這個視圖)。在【Telephone Actions】分組框,選中SMS選項框,并在【Incomingnumber】文本框中輸入一個電話號,然后在【Message】文本框中輸入要發送的短信內容,最后單擊【Send】按鈕來模擬發送短信。輸入相應信息后的【Emulator Control】視圖如圖1所示。當單擊【Send】按鈕后,手機模擬器就會接收到短信,不管接收短信的應用程序是否啟動,都會顯示如圖2所示的顯示短信內容的Toast信息提示框。












          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2010-09-13 16:59 銀河使者 閱讀(2915) 評論(1)  編輯  收藏 所屬分類: java 原創移動(mobile)Android/OPhone

          評論

          # re: 《Android/OPhone開發完全講義》連載(8):收到短信了,我該做點什么?  回復  更多評論   

          來打打醬油。
          2010-09-27 09:37 | 阿蜜果
          主站蜘蛛池模板: 商都县| 德令哈市| 安康市| 招远市| 荣成市| 灌云县| 田东县| 苏尼特左旗| 泰安市| 白水县| 安丘市| 临澧县| 都匀市| 岑巩县| 宝鸡市| 斗六市| 甘谷县| 新津县| 神木县| 凤翔县| 荆门市| 丽水市| 长阳| 泌阳县| 项城市| 鄂托克旗| 祁连县| 广东省| 宕昌县| 获嘉县| 和田市| 克什克腾旗| 耿马| 嘉善县| 祥云县| 达尔| 靖宇县| 东平县| 龙岩市| 桑植县| 诏安县|