SmsManager smsMagager = SmsManager.getDefault(); // create the sentIntent parameter Intent sentIntent = new Intent(SENT_SMS_ACTION); PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0); // create the deilverIntent parameter Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0); String tel = editTel.getText().toString(); String msg = editMsg.getText().toString(); smsMagager.sendTextMessage( tel , null , msg , sentPI , deliverPI );
先上代碼,上述功能實現了Android傳送簡訊到指定號碼的功能(sentPI為了獲得發送報告的,DeliverPI為了獲得對方接受到之後返回的報告的),區別就是:發送報告,只是簡訊發送出去,對面是否接受不關心;接收報告:就是發送方的簡訊發送到對方手機上之後,對方手機會返回給電訊廠商一個訊號,告知電訊廠商收到簡訊,電訊廠商再把這個訊號發給發送方,發送方得到這個訊號之後,
同時需要給這個應用許可權
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
若想把剛剛發送的簡訊插入到資料庫中,需要增加以下內容
ContentValues values = new ContentValues(); //發送時間 values.put("date", System.currentTimeMillis()); //閱讀狀態 values.put("read", 0); //1為收 2為發 values.put("type", 2); //送達號碼 values.put("address",tel); //送達內容 values.put("body", msg); //插入簡訊庫 getContentResolver().insert(Uri.parse("content://sms/sent"), values);
同時需要增加以下許可權
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
開始我擔心,只插入到一個表裡會不會有問題,後來參看了TelephonyProvider發現我的想法是多餘的,因為TelephonyProvider會把資料插入到每個表中。
註冊兩個廣播~得到發送報告和接收報告~
@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));}
一個是傳送簡訊的,一個是接受簡訊的,
BroadcastReceiver sendMessage = new BroadcastReceiver() {@Overridepublic void onReceive(Context c, Intent intent) {// TODO Auto-generated method stub//判斷簡訊是否發送成功 switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(c, "簡訊發送成功", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(c, "發送失敗", Toast.LENGTH_LONG).show(); break; } }};BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //表示對方成功收到簡訊 Toast.makeText(context, "對方接收成功",Toast.LENGTH_LONG).show(); } };
android 的簡訊發送可以在模擬器中進行類比出來。
如現在啟動一模擬器id 號為5554,
啟動終端
telnet localhost 5554
輸入help 可以看到很多用於模擬器中的功能命令
gsm call 134343434 // 便是呼叫當前模擬器命令
sms send 15555218135 Hello,this is a Message // 是向當前的模擬器傳送簡訊息