Android開發教學
Android 開發環境配置
Android 架構
Android 應用組件
Android Hello World示例
Android 資源組織和訪問
Android Activity
Android Service
Android廣播接收器
Android內容提供者
Android碎片/片段
Android Intent過濾器
Android UI佈局
Android LinearLayout
Android RelativeLayout
Android TableLayout
Android AbsoluteLayout
Android FrameLayout
Android ListView
Android GridView
Android UI控件
Android TextView
Android EditText
Android AutoCompleteTextView
Android Button
Android ImageButton
Android CheckBox
Android ToggleButton
Android RadioButton
Android RadioGroup
Android事件處理
Android樣式和主題
Android樣式示例
Android主題示例
Android自定義組件
Android拖放
Android通知
Android基於位置服務
Android發送電子郵件
Android發送短信/SMS
Android撥打電話
發佈Android應用
ArrayAdapter
SimpleCursorAdapter
Android ProgressDialog
Android Spinner
使用活動代碼自定義Android組件
使用佈局文件自定義Android組件
Android自定義組件及屬性
Android Alertdialog(警告對話框)
Android Animation(動畫)實例
Android音頻捕獲(錄音)
Android音頻管理器實例
Android AutoCompleteTextView(自動完成)實例
Android最佳實踐
Android Bluetooth(藍牙)實例
Android Camera(攝像頭)
Android Clipboard(複製/剪貼板)
Android自定義字體
Android數據備份
Android Gestures/手勢
Android圖片效果
Android圖片切換
Android內部存儲
Android JetPlayer實例
Android JSON解析器
Android加載Spinner
Android本地化
Android登錄實例
Android MediaPlayer(多媒體播放)

Android發送短信/SMS

有以下兩種方式來使用 Android 設備發送短信:

  • 使用 SmsManager 發送短信

  • 使用內置 Intent 發送短信

使用SmsManager 發送短信

SmsManager管理,例如在給定的移動設備將數據發送到的SMS操作。可以創建此對象調用靜態方法SmsManager.getDefault() 如下:

SmsManager smsManager = SmsManager.getDefault();

創建 SmsManager 對象之後,可以使用 sendDataMessage() 方法指定的手機號碼發送短信,如下:

smsManager.sendTextMessage("phoneNo", null, "SMS text", null, null);

除了上述方法外,SmsManager類可供選擇的其他幾個重要的函數。下面列出了這些方法:

S.N.

方法和說明

1

ArrayList divideMessage(String text) 
這個方法把一個消息文本分成幾個片段,最大不能大於短信大小

2

static SmsManager getDefault() 
這個方法被用來獲取 SmsManager 的默認實例

3

void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) 
這個方法被用來發送一個基於數據 SMS 到特定的應用程序的端口

4

void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList parts, ArrayList sentIntents, ArrayList deliveryIntents) 
發送一個基於多部分文本短信

5

void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 
發送基於文本的短信

示例

下面的示例演示如何在實際中使用 SmsManager 對象給定的手機號碼發送短信。

要嘗試這個例子中,需要實際配備了最新 Android OS 的移動設備,否則仿真器可能無法正常工作。

步驟

描述

1

使用Android Studio 創建Android應用程序,並將它命名爲SendSMSDemounder。在創建這個項目,確保目標 SDK 編譯在Android SDK 的最新版本或使用更高級別的API

2

修改 src/MainActivity.java 文件,並添加所需的代碼以發送短信

3

修改所需的佈局XML文件 res/layout/activity_main.xml 添加任何GUI組件。加入了一個簡單的GUI以輸入手機號碼並短信發送,以及一個簡單的按鈕發送短信。

4

修改 res/values/strings.xml 定義所需的常量值

5

修改  AndroidManifest.xml  如下所示

6

運行該應用程序啓動Android模擬器並驗證應用程序所做的修改結果。

以下是修改的主活動文件 src/com.yiibai.sendsmsdemo/MainActivity.java 的內容

package com.example.sendsmsdemo; import android.os.Bundle; import android.app.Activity; import android.telephony.SmsManager; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { Button sendBtn; EditText txtphoneNo; EditText txtMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendBtn = (Button) findViewById(R.id.btnSendSMS); txtphoneNo = (EditText) findViewById(R.id.editTextPhoneNo); txtMessage = (EditText) findViewById(R.id.editTextSMS); sendBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { sendSMSMessage(); } }); } protected void sendSMSMessage() { Log.i("Send SMS", ""); String phoneNo = txtphoneNo.getText().toString(); String message = txtMessage.getText().toString(); try { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNo, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

下面是 res/layout/activity_main.xml 文件的內容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textViewPhoneNo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/phone_label" /> <EditText android:id="@+id/editTextPhoneNo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone"/> <TextView android:id="@+id/textViewMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sms_label" /> <EditText android:id="@+id/editTextSMS" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="textMultiLine"/> <Button android:id="@+id/btnSendSMS" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/send_sms_label"/>

下面文件 res/values/strings.xml 的內容中定義兩個新的常量:

<string name="app_name">SendSMSDemo <string name="action_settings">Settings <string name="hello_world">Hello world! <string name="phone_label">Enter Phone Number: <string name="sms_label">Enter SMS Message: <string name="send_sms_label">Send SMS

以下是AndroidManifest.xml 文件的默認內容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yiibai.sendsmsdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.SEND_SMS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.yiibai.sendsmsdemo.MainActivity" android:label="@string/app_name" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

我們嘗試運行 SendSMSDemo 應用程序。Eclipse的AVD上安裝的應用程序,並啓動它,如果一切的設置和應用代碼都沒有問題,它會顯示以下模擬器窗口: 

Android

選擇移動設備作爲一個選項,然後檢查移動設備,這將顯示以下畫面:

Android發送短信/SMS

現在可以輸入手機號碼及文本消息併發送。最後點擊"Send SMS"按鈕發送短信。請確保GSM連接工作正常,以及提供正確的短信收件人。

可以把一些短信用逗號分隔,在程序中把它解析爲一個數組的字符串,最後可以使用一個循環來發送消息給所有給定的手機號碼。下一節將學習如何使用現有的 SMS 客戶端發送短信。

使用內置Intent發送短信

發送短信通過調用Android內置短信功能,可以使用Android的Intent。以下部分說明使用 Intent 對象發送短信的功能。

Intent對象 - 發送短信動作

使用ACTION_VIEW 動作啓動 Android 設備上安裝 SMS 客戶端。以下是簡單的語法來創建一個 Intent 來使用 ACTION_VIEW 動作

Intent smsIntent = new Intent(Intent.ACTION_VIEW);

Intent對象 - 數據/發送短信類型

要發送的短信需要使用SetData()方法指定 smsto: 作爲URI和數據類型將使用 setType() 方法如下vnd.android-dir/mms-sms: 

smsIntent.setData(Uri.parse("smsto:")); smsIntent.setType("vnd.android-dir/mms-sms");

Intent 對象- 附加發送短信

Android已經內置支持添加電話號碼和短信發送短信如下:

smsIntent.putExtra("address" , new String("0123456789;3393993300")); smsIntent.putExtra("sms_body" , "Test SMS to Angilla");

這裏address 和sms_body是大小寫敏感的,應以小字符指定。可以指定一個以上的號碼在單串,但由分號(;) 隔開。

示例

下面的示例演示如何在實際使用Intent對象啓動SMS客戶端發送短信給定的收件人。

要嘗試這個例子中,需要實際配備了最新的 Android OS的移動設備,否則仿真器可能無法正常工作。

步驟

描述

1

使用Android Studio創建Android應用程序,並將它命名爲SendSMSDemounder,創建這個項目,確保目標 SDK編譯在Android SDK的最新版本或使用更高級別的API。

2

修改src/MainActivity.java文件,並添加所需的代碼,以發送短信。

3

修改所需的佈局XML文件 res/layout/activity_main.xml  添加任何GUI組件。添加一個簡單的按鈕用來觸發啓動SMS客戶端。

4

修改 res/values/strings.xml 定義所需的常量值

5

修改 AndroidManifest.xml 如下所示

6

運行該應用程序啓動Android模擬器並驗證應用程序所做的修改結果。

以下是修改主活動文件 src/com.yiibai.sendsmsdemo/MainActivity.java 的內容

package com.example.sendsmsdemo; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startBtn = (Button) findViewById(R.id.sendSMS); startBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { sendSMS(); } }); } protected void sendSMS() { Log.i("Send SMS", ""); Intent smsIntent = new Intent(Intent.ACTION_VIEW); smsIntent.setData(Uri.parse("smsto:")); smsIntent.setType("vnd.android-dir/mms-sms"); smsIntent.putExtra("address" , new String ("0123456789")); smsIntent.putExtra("sms_body" , "Test SMS to Angilla"); try { startActivity(smsIntent); finish(); Log.i("Finished sending SMS...", ""); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(MainActivity.this, "SMS faild, please try again later.", Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

下面是 res/layout/activity_main.xml 文件的內容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/sendSMS" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/compose_sms"/>

下面文件 res/values/strings.xml 的內容中定義兩個新的常量:

<string name="app_name">SendSMSDemo <string name="hello_world">Hello world! <string name="action_settings">Settings <string name="compose_sms">Compose SMS

以下是AndroidManifest.xml 文件的默認內容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yiibai.sendsmsdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.yiibai.sendsmsdemo.MainActivity" android:label="@string/app_name" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

我們嘗試運行 SendSMSDemo 應用程序。 Eclipse AVD安裝的應用程序,並啓動它,如果一切設置和應用都沒有問題,它會顯示以下模擬器窗口: 

Android

選擇移動設備作爲一個選項,然後檢查移動設備,這將顯示以下畫面:

Android發送短信/SMS

現在使用Compose SMS「按鈕推出Android內置的SMS客戶端,如下圖所示:

Android發送短信/SMS

可以修改默認字段最後使用發送短信按鈕(標有紅色矩形)提到收件人發送短信。

以上示例代碼下載:http://pan.baidu.com/s/1c0Ah508