Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> android基礎---->發送和接收短信

android基礎---->發送和接收短信

編輯:Android編程入門

  收發短信應該是每個手機最基本的功能之一了,即使是許多年前的老手機也都會具備這項功能,而Android 作為出色的智能手機操作系統,自然也少不了在這方面的支持。今天我們開始自己創建一個簡單的發送和接收短信的應用。

 

目錄導航

  1.   接收短信
  2.   發送短信
  3.   友情鏈接

 

接收短信

項目的結構如下:一個簡單的接收和發送短信的功能

一、定義一個接收短信的廣播:當手機接收到一條短信的時候,系統會發出一條值為android.provider.Telephony.SMS_RECEIVED 的廣播,這條廣播裡攜帶著與短信相關的所有數據。

// 接收短信的廣播
class MessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus"); // 提取短信消息
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < messages.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        }
        String address = messages[0].getOriginatingAddress(); // 獲取發送方號碼
        String fullMessage = "";
        for (SmsMessage message : messages) {
            fullMessage += message.getMessageBody(); // 獲取短信內容
        }
        textView.setText("address; " + address + ", message: " + fullMessage);
        abortBroadcast();
    }
}

 

二、 注冊廣播,這裡我們動態在代碼中注冊:

// 注冊接收廣播
IntentFilter intentFilter1 = new IntentFilter();
intentFilter1.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
intentFilter1.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver = new MessageReceiver();
registerReceiver(messageReceiver, intentFilter1);

 

 三、 聲明權限:

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

 

發送短信

一、 發送短信:用getDefault方法得到SmsManager對象,調用sendTextMessage方法發送短信

// 發送短信
public void send(View view) {
    SmsManager smsManager = SmsManager.getDefault();
    String destinationAddress = "15527100207";
    String text = "我愛你!";

    Intent intent1 = new Intent(SENT_SMS_ACTION);
    PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, intent1, 0);
    Intent intent2 = new Intent(DELIVERY_SMS_ACTION);
    PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, intent2, 0);
    smsManager.sendTextMessage(destinationAddress, null, text, sentIntent, deliveryIntent); // aidl服務,進程間的通信
}

 我們具體了解一下sendTextMessage方法一個參數的含義:

public void sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress:  // 目的地,也就是對方的手機號
scAddress:          // 服務中心地址,為空的話就是默認的SMSC
text:               // 發送消息的具體內容
sentIntent:         // 當消息成功或者失敗發送時,就發起這個廣播
deliveryIntent:     // 當消息到達目的地時,就發起這個廣播

 

三、 sentIntent的廣播:

// 發送短信的狀態廣播
class MessageBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 一個10位數的號碼發送,也能成功,但是對方沒有接收短信。
        if (getResultCode() == RESULT_OK) {
            Toast.makeText(MainActivity.this, "發送成功!", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "發送失敗!", Toast.LENGTH_SHORT).show();
        }
    }
}

 

四、 deliveryIntent的廣播:

// 當消息被傳遞給收件人時 
class DeliveryBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(MainActivity.this, "對方接收短信成功!", Toast.LENGTH_SHORT).show();
    }
}

 

友情鏈接

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved