轉載:http://ziyu-1.iteye.com/blog/1013932
android中可以通過兩種方式發送短信?
第一:調用系統短信接口直接發送短信;主要代碼如下:?
- //直接調用短信接口發短信??
- SmsManager?smsManager?=?SmsManager.getDefault();??
- List<String>?divideContents?=?smsManager.divideMessage(content);????
- for?(String?text?:?divideContents)?{????
- ????smsManager.sendTextMessage("150xxxxxxxx",?null,?text,?sentPI,?deliverPI);????
- }??
第二:調起系統發短信功能;主要代碼如下:?
- Uri?uri?=?Uri.parse("smsto:10010");????????????
- Intent?it?=?new?Intent(Intent.ACTION_SENDTO,?uri);????????????
- it.putExtra("sms_body",?"102");????????????
- activity.startActivity(it);??
這里主要講解第一種方法,其中大部分信息來源于互聯網:?
1.獲取短信管理器?
- SmsManager?smsManager?=?SmsManager.getDefault();??
2.拆分短信內容(手機短信長度限制)?
- List<String>?divideContents?=?smsManager.divideMessage(content);??
3.發送拆分后的內容?
- List<String>?divideContents?=?smsManager.divideMessage(content);????
- for?(String?text?:?divideContents)?{????
- ????smsManager.sendTextMessage("150xxxxxxxx",?null,?text,?sentPI,?deliverPI);????
- }??
4.處理返回的發送狀態?
- String?SENT_SMS_ACTION?=?"SENT_SMS_ACTION";??
- Intent?sentIntent?=?new?Intent(SENT_SMS_ACTION);??
- PendingIntent?sentPI?=?PendingIntent.getBroadcast(context,?0,?sentIntent,??
- ????????0);??
- //?register?the?Broadcast?Receivers??
- context.registerReceiver(new?BroadcastReceiver()?{??
- ????@Override??
- ????public?void?onReceive(Context?_context,?Intent?_intent)?{??
- ????????switch?(getResultCode())?{??
- ????????case?Activity.RESULT_OK:??
- ????????????Toast.makeText(context,??
- ????????"短信發送成功",?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));??
5.處理返回的接收狀態?
- String?DELIVERED_SMS_ACTION?=?"DELIVERED_SMS_ACTION";??
- //?create?the?deilverIntent?parameter??
- Intent?deliverIntent?=?new?Intent(DELIVERED_SMS_ACTION);??
- PendingIntent?deliverPI?=?PendingIntent.getBroadcast(context,?0,??
- ???????deliverIntent,?0);??
- context.registerReceiver(new?BroadcastReceiver()?{??
- ???@Override??
- ???public?void?onReceive(Context?_context,?Intent?_intent)?{??
- ???????Toast.makeText(context,??
- ??"收信人已經成功接收",?Toast.LENGTH_SHORT)??
- ??.show();??
- ???}??
- },?new?IntentFilter(DELIVERED_SMS_ACTION));??
發送短信的參數說明?
- smsManager.sendTextMessage(destinationAddress,?scAddress,?text,?sentIntent,?deliveryIntent)??
-- destinationAddress:目標電話號碼?
-- scAddress:短信中心號碼,測試可以不填?
-- text: 短信內容?
-- sentIntent:發送 -->中國移動 --> 中國移動發送失敗 --> 返回發送成功或失敗信號 --> 后續處理?? 即,這個意圖包裝了短信發送狀態的信息?
-- deliveryIntent: 發送 -->中國移動 --> 中國移動發送成功 --> 返回對方是否收到這個信息 --> 后續處理? 即:這個意圖包裝了短信是否被對方收到的狀態信息(供應商已經發送成功,但是對方沒有收到)。?