標籤:android 簡訊發送器
這幾天雖說偶遇瓶頸,但也漸入佳境,由於之前沒有接觸過android,所以作為一個新手不會給自己過高的要求。相比於去年做的分布式資源檢索,今年的移動開發著實要簡單一些,雖然其本質沒有太大的區別,但從使用者體驗方面來說更能激發每一位學習者的興趣,這可能就是android的魅力所在吧...
前天做的“電話撥號器”,最後載入到模擬器的時候不知道哪裡出了錯,系統總是自動關閉,惱羞成怒也就沒再搭理它;昨天又做了“簡訊發送器”,也遇到了和前者相似的問題,不過最後經過調試算是研製成功了吧,因此調整了前者,相同的解決方案,外瑞古德~~~那接下來就以“簡訊發送器”為例談談自己的一些學習心得吧...
首先一張:
咱先來說說這個簡訊發送器的基本構造,大家從也可看出,其大體可分為五部分,其實也就是兩條提示+兩個輸入框,還有一個發送按鈕。那麼這五部分是怎麼出來的,先來看一小段代碼:
<EditText android:id="@+id/et_word" android:lines="5" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_ism" android:layout_centerVertical="true" android:inputType="textMultiLine" ></EditText>
這塊代碼是定義簡訊輸入框的,最上邊的"@+id/et_word”是在R.java檔案中添加一個名為et_word的id,也就是聲明了我們這個輸入框;lines=“5”規定了這個輸入框為五行,這個長度一般可以滿足我們的需求;而下邊的四個layout屬性定義了這個文字框的長寬和相對位置,其屬性值大家可以好好瞭解一下,都很有意思,其中第三個的意思是文字框的位置在id為tv_ism的下方,而tv_ism便是我們所看到的“請輸入簡訊內容”;最後定義了簡訊輸入框的類型。其他幾塊內容都和其類似,當然還有很多的屬性,大家可以查看其API瞭解一下。
UI設計的相對簡陋,還望大家多多包涵,接下來就是賦予其相應的功能了,再上代碼一大塊:
public class MainActivity extends Activity implements OnClickListener { private EditText et_word;private EditText et_number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_number=(EditText)findViewById(R.id.et_number); et_word=(EditText)findViewById(R.id.et_word); Button bt_sent=(Button)findViewById(R.id.bt_sent); bt_sent.setOnClickListener(this); }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_sent: String word=et_word.getText().toString().trim(); String number=et_number.getText().toString().trim(); if(TextUtils.isEmpty(word)||TextUtils.isEmpty(number)){ Toast.makeText(this, "電話號碼或者簡訊內容不可為空", Toast.LENGTH_SHORT).show(); return; }else{ SmsManager smsManager=SmsManager.getDefault(); ArrayList<String> words=smsManager.divideMessage(word); for(String str:words){ smsManager.sendTextMessage(number, null, str, null, null); } }break;}} }
我們先從實際出發,要想使簡訊發送器能夠傳送簡訊,首先要找到發送按鈕,但我們點擊按鈕時,系統會找到簡訊內容和想要發送的號碼,然後實現其功能,大體上也就是分為這三步。
於是乎我們先找到按鈕:Button bt_sent=(Button)findViewById(R.id.bt_sent); bt_sent.setOnClickListener(this);這裡邊涉及了幾個常用的方法,大家看其表面意思也能瞭解,先通過id找到按鈕,然後調用其方法設定點擊事件;下邊的onClick(View v)為介面OnClickListener的實現方法,當的得到的id為R.id.bt_sent時執行一系列的操作;上邊的et_number、et_word和bt_sent是一樣的,先通過id找到他們,然後利用他們自身的方法提取電話號碼和簡訊內容;接下來就是判斷電話號碼或者簡訊內容是否為空白,相信大家都有這樣的常識,二者有一方為空白則不能傳送簡訊;關於Toast大家可以去查一查,翻譯成中文為“吐絲麵包”,它主要是給使用者一個提示,它調用的方法有三個參數,這個一開始不大好理解,不過通過該例大家也能猜出它的大概意思,其中第三個參數為顯示時間長度,最後不要忘了調用Toast的show()返回值。如果號碼或內容不為空白的話那就執行else裡的語句,提取簡訊內容,如果發送內容過長,超過規定的70個漢字或者160個字元便對其進行分段,這時要用到ArrayList<String> words=smsManager.divideMessage(word);然後對其進行遍曆,smsManager.sendTextMessage(number, null, str, null, null);這裡邊有五個參數,第一個為要發送的連絡人電話號碼;第二個為簡訊來自哪裡,現在我國的運行商不支援這個功能;第三個為發送的簡訊內容;第四個參數負責報告簡訊是否發送成功;第五個為是否發送送達報告,這個現在先不用管,都可設為null。
還需要注意的一點就是SmsManager smsManager=SmsManager.getDefault();這條語句,它之前預設匯入的包已經到期,所以需要匯入新的包,這個到時候會有提示。
ok,這樣一個簡易的簡訊發送器便搭建完成了,啟動兩個模擬器便可進行實驗,就如所示,發送短文本和長文本的區別也一目瞭然。今天將繼續深入瞭解四種布局,UI時代到來,敬請期待……