Android短信收發

jopen 10年前發布 | 18K 次閱讀 Android Android開發 移動開發

短信發送,有些機型可以在后臺向指定的手機發送短信而不會有提示,有些機型可能會提醒用戶讓用戶決定到底發不發送,我想這應該是出于安全的考慮

實現短信的發送,我們可以通過注冊receiver得知短信發送是否成功,對方是否接受到了

    /** 
     * 發送短信 
     * @param friend_num 
     * @param smsMsg 
     */  
    private void sendSMS(String friend_num, String smsMsg) {  

        String SENT_SMS_ACTION = "SENT_SMS_ACTION";  
        Intent sentIntent = new Intent(SENT_SMS_ACTION);  
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,  
                sentIntent, 0);  
        // register the Broadcast Receivers  
        this.registerReceiver(new BroadcastReceiver() {  
            @Override  
            public void onReceive(Context _context, Intent _intent) {  
                switch (getResultCode()) {  
                case Activity.RESULT_OK:  
                    //Toast.makeText(this, "短信發送成功", Toast.LENGTH_SHORT)  
                    //      .show();  

                    break;  
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
                    break;  
                case SmsManager.RESULT_ERROR_RADIO_OFF:  
                    break;  
                case SmsManager.RESULT_ERROR_NULL_PDU:  
                    break;  
                }  
            }  
        }, new IntentFilter(SENT_SMS_ACTION));  

        String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";  
        // create the deilverIntent parameter  
        Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);  
        PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0,  
                deliverIntent, 0);  
        this.registerReceiver(new BroadcastReceiver() {  
            @Override  
            public void onReceive(Context _context, Intent _intent) {  
                //Toast.makeText(this, "收信人已經成功接收", Toast.LENGTH_SHORT).show();  
            }  
        }, new IntentFilter(DELIVERED_SMS_ACTION));  

        // 直接調用短信接口發短信  
        SmsManager smsManager = SmsManager.getDefault();  
        List<String> divideContents = smsManager.divideMessage(smsMsg);  
        //可能短信的內容過長,可以自動分兩封發,如果信息中包含一些連貫的東西,還是手動拆分比較好  
        for (String text : divideContents) {  
            smsManager.sendTextMessage(friend_num, null, text, sentPI,  
                    deliverPI);  
        }  

    }  

短信的攔截,這個功能有點不可靠,有些機型壓根就攔截不到短信(我的M1S,360、QQ手機管家都攔截不到)手機里面內置了一個短信攔截的軟件,優先級別是最高的,但大多數手機還是能夠攔截的到的,但也存在一個問題,由于短信接收觸發的廣播是有序的廣播,是一級級往后傳遞的,不管哪一級都可以切斷,后續的就接收不到了,具有相同功能的應用之間的優先級問題,手機qq管家這方面做的比360好,優先級更高,我們自己編寫的短信攔截軟件也可以把360的干掉,但 qq的就難辦了...

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!