為代碼結構圖。
現在我們看下具體的代碼。
Send.java
package cn.com.sms.send;</p><p>import java.util.ArrayList;<br />import java.util.Iterator;</p><p>import android.app.Activity;<br />import android.app.PendingIntent;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.telephony.SmsManager;<br />import android.util.Log;<br />import android.view.View;<br />import android.widget.Button;<br />import android.widget.EditText;<br />import android.widget.Toast;</p><p>public class Send extends Activity {<br />private String message;<br />private String number ;<br />private EditText editText;<br />private EditText editText2;<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> editText = (EditText) this.findViewById(R.id.number);<br /> editText2 = (EditText)this.findViewById(R.id.message);</p><p> Button button = (Button)this.findViewById(R.id.button);<br /> button.setOnClickListener(new View.OnClickListener() {</p><p>public void onClick(View v) {<br /> number = editText.getText().toString();<br /> message = editText2.getText().toString();<br /> // 在LogCat中可以查看到number和message的相關資訊<br /> Log.i("number", number);<br /> Log.i("message", message);<br /> /*擷取系統預設的資訊管理器,一定要注意的是SmsManager是android.telephony.SmsManager;這和<br /> *我們使用的版本有關,在 Android 2.0 以前 應該使用 android.telephony.gsm.SmsManager<br /> *Android 2.0 之後的版本應該用 android.telephony.SmsManager。<br /> */<br />SmsManager smsManager = SmsManager.getDefault();<br />/*PendingIntent.getBroadcast返回一個用於廣播的PendingIntent對象,類似於調用Content.sendBroadcast();<br /> */<br />PendingIntent paIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_SENT"), 0);<br />PendingIntent deliveryIntent = PendingIntent.getBroadcast(Send.this, 0, new Intent("SMS_DELIVERED"), 0);<br />// smsManager.divideMessage有些時候簡訊如果超過了字數,我們就需要這個方法來幫我們拆分簡訊內容。<br />ArrayList<String> smses = smsManager.divideMessage(message);<br />Iterator<String> iterator = smses.iterator();<br />while(iterator.hasNext()){<br />String temp = iterator.next();<br />//傳送簡訊<br />smsManager.sendTextMessage(number, null, temp, paIntent, deliveryIntent);<br />}<br />// 彈出一個浮動框顯示提示內容,Toast.LENGTH_LONG代表浮動框顯示時間的長短<br />Toast.makeText(Send.this, "簡訊發送完成", Toast.LENGTH_LONG).show();</p><p>}<br />});</p><p> }<br />}
main.xml
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><TextView<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="歡迎使用簡訊發送器,請輸入電話號碼"<br /> /><br /> <EditText<br /> android:id="@+id/number"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:hint="這裡輸入電話號碼"<br /> /><br /> <TextView<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="歡迎使用簡訊發送器,請輸入簡訊內容"<br /> /><br /> <EditText<br /> android:id="@+id/message"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:minLines="3"<br /> android:hint="這裡輸入簡訊內容"<br /> /><br /> <Button<br /> android:id="@+id/button"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="send"<br /> /><br /></LinearLayout><br />
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="cn.com.sms.send"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <uses-sdk android:minSdkVersion="8" /><br /> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission></p><p> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".Send"<br /> android:label="@string/app_name"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity></p><p> </application><br /></manifest>
最終為:
和打電話小程式一樣,這裡也需要開啟兩個AVD才能進行功能測試。
----------------------------------------------------------------------------------------
廢話連篇:
發簡訊應用的主要的類就是SmsManager。 在 Android 2.0 以前 應該使用 android.telephony.gsm.SmsManager
之後應該用 android.telephony.SmsManager;
SmsManager smsManager = SmsManager.getDefault();意思為擷取系統預設的資訊管理器
---------------------------------------------------------------------------------------
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
-- destinationAddress:目標電話號碼
-- scAddress:服務商的簡訊中心號碼(例如中國移動的簡訊中心號碼),測試可以不填。
-- text: 簡訊內容
-- sentIntent:發送 -->中國移動 --> 中國移動發送失敗 --> 返回傳送成功或失敗訊號 --> 後續處理 即,這個意圖封裝了簡訊發送狀態的資訊
-- deliveryIntent: 發送 -->中國移動 --> 中國移動發送成功 --> 返回對方是否收到這個資訊 --> 後續處理 即:這個意圖封裝了簡訊是否被對方收到的狀態資訊(供應商已經發送成功,但是對方沒有收到)。
--------------------------------------------------------------------------------------
public static PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags)
返回一個用於廣播的PendingIntent,類似於調用Context.sendBroadcast()函數
requestCode 暫時不用
intent 是用於廣播的intent
flag 有:FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT 用於設定建立的PendingIntent是使用一次、如無則不建立、取消當前、更新當前等屬性。
------------------------------------------------------------------------------
此外,我們還要在AndroidManifest.xml中聲明簡訊發送許可權。
<uses-permission android:name="android.permission.SEND_SMS"/>
-------------------------------------------------------------------------------
有的時候,我們兩個AVD進行類比發簡訊時,會發現有時候該程式無法正常使用。系統會提示我們NO DNS servers found,找不到DNS服務。這種情況一般是由於你的電腦沒有聯入網路的原因造成的。
- 傳送簡訊:
- SmsManager smsMgr = SmsManager.getDefault();
- smsMgr.sendTextMessage(address, null, message, null, null);
-
- 顯示寫簡訊介面:
- Uri smsToUri = Uri.parse("smsto://10086");
- Intent mIntent = new Intent( android.content.Intent.ACTION_SENDTO, smsToUri );
- startActivity( mIntent );
-
- 寄送電子郵件:
- Intent i = new Intent(Intent.ACTION_SEND);
- i.putExtra(Intent.EXTRA_EMAIL, address);
- i.putExtra(Intent.EXTRA_SUBJECT, filename);
- i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filename)); ;
- i.setType("text/csv");
- startActivity(Intent.createChooser(i, "EMail File"));