<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    《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 銀河使者 閱讀(2916) 評論(1)  編輯  收藏 所屬分類: java 原創移動(mobile)Android/OPhone

    評論

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

    來打打醬油。
    2010-09-27 09:37 | 阿蜜果
    主站蜘蛛池模板: 亚洲av无码一区二区三区在线播放| 亚洲国产成人精品无码一区二区| 国产亚洲欧美在线观看| 91在线品视觉盛宴免费| 亚洲最大的黄色网| 青青草国产免费久久久91| 亚洲av午夜国产精品无码中文字| 免费毛片在线播放| 免费国产va在线观看| 国产精品亚洲视频| 暖暖免费在线中文日本| 亚洲精品亚洲人成在线麻豆| 国产在线观看片a免费观看| 亚洲中文字幕无码中文字| 日韩人妻无码免费视频一区二区三区 | 日本高清免费中文在线看| 亚洲精品无码专区久久同性男| 成人黄网站片免费视频| 久久丫精品国产亚洲av不卡 | 亚洲av无码一区二区乱子伦as| 免费人成视频在线观看网站 | 中国亚洲女人69内射少妇| 国产成人精品免费久久久久| 亚洲日韩在线视频| 日韩毛片无码永久免费看| 国产伦精品一区二区免费| 亚洲美免无码中文字幕在线| 免费看的成人yellow视频| fc2免费人成在线视频| 91亚洲va在线天线va天堂va国产| 免费无码精品黄AV电影| 一个人免费观看www视频| 亚洲最新中文字幕| 亚洲国产成人五月综合网 | 四虎国产精品永久免费网址| 日韩亚洲国产综合高清| 中文字幕不卡亚洲| 99久久免费精品国产72精品九九| 成人网站免费大全日韩国产| 亚洲AV无码一区二区三区人| 国产L精品国产亚洲区久久|