1.在Android中,SMS消息傳遞是由SmsManager進(jìn)行處理的。可以通過靜態(tài)方法SmsManager.getDefault()來獲得對(duì)SmsManager的引用,如下:
SmsManager smsManager = SmsManager..getDefault();
2.Android中,要接收和發(fā)送SMS需要以下兩個(gè)權(quán)限
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
3.SMS的發(fā)送
1) 發(fā)送文本信息,可以使用SMS Manager 中的sendTextManager 的方法
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
參數(shù)如下:
destinationAddress:接收方的手機(jī)號(hào)碼
scAddress:發(fā)送方的手機(jī)號(hào)碼
text:信息內(nèi)容
sentIntent:發(fā)送是否成功的回執(zhí),會(huì)在消息發(fā)送成功或者失敗后觸發(fā)。
DeliveryIntent:接收是否成功的回執(zhí),當(dāng)目標(biāo)接收人收到你的信息后觸發(fā)。
2)跟蹤和確認(rèn)SMS消息的發(fā)送
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
參數(shù)sentlntent的返回碼如下:
Activity.RESULT_OK:表示發(fā)送成功
RESULT_ERROR_GENERIC_FAILURE :表示發(fā)生了為指定的錯(cuò)誤
RESULT_ERROR_RADIO_OFF :表示連接的無線信號(hào)被 關(guān)閉
RESULT_ERROR_NULL_PDU:表示PDU錯(cuò)誤
3)發(fā)送SMS以及監(jiān)控它的發(fā)送過程是否成功的經(jīng)典示例:
String SEND_SMS_ACTION = "SENT_SMS_ACTION";
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
//創(chuàng)建senTIntent參數(shù)
Intent sentIntent = new Intent(SEND_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(), 0, sentIntent, 0);
//創(chuàng)建deliveredIntent參數(shù)
Intent deliveredIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent delivePI = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveredIntent, 0);
//注冊(cè)廣播器
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
switch (getResultCode()) {
case Activity.RESULT_OK:
....
case RESULT_ERROR_GENERIC_FAILURE:
....
case RESULT_ERROR_RADIO_OFF:
....
case RESULT_ERROR_NULL_PDU:
....
}
}
},
new IntentFilter(SEND_SMS_ACTION));
//注冊(cè)廣播器
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
....
}
}
},
new IntentFilter(DELIVERED_SMS_ACTION));
4)保證不超過最大的SMS信息大小
SMS的大小一般被限制為160個(gè)字符,比它大的信息會(huì)被分割為多個(gè)小的部分。SMS Manager的divideMeaasge方法可 以接收一個(gè)字符串作為輸入,并把他分割到一個(gè)消息的ArrayList中,每一個(gè)消息都比允許的最大長(zhǎng)度小。使用sendMultipartTextM essage可以發(fā)送消息數(shù)組。如下:
ArrayList<String> messageArray - smsManager.divideMeaasge(myMessage);
ArrayList<PendingIntent> sentIntents = new ArrayList<Pendinglntent>();
for(int i = 0; i < messageArrsy.size(); i ++)
{
sentIntents.add(sentPI);
smsManager.sendMultipartTextMessage(sendTo,null,messageArray,sentintent,null);
}
5)發(fā)送數(shù)據(jù)消息
使用SMS Manager的sendDataMessage方法,可以經(jīng)由SMS來發(fā)送二進(jìn)制數(shù)據(jù)。
sendDataMessage與sendTextMessage方法相似,前者需要額外的參數(shù):信息到達(dá)的目的端口和由你想發(fā)送的數(shù)據(jù)所組成的一個(gè) 字節(jié)數(shù)組
short destinationPort = 80;
byte[] data = [...you data ...];
smsManager.sendDataMessage(sendTo,null,destinationPort ,data,sentPI,null);
4.SMS的監(jiān)聽
SMS廣播Intent包含了收到的SMS的詳細(xì)信息。要提取封裝在SMS廣播的SmsManager對(duì)象,需要使用PDU密鑰來提取一個(gè)SMS
pdus數(shù)組,其中每一個(gè)pdu都表示一條SMS信息。
如下:
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
每一個(gè)SMS Manager對(duì)象都包含了SMSManager信息的詳細(xì)內(nèi)容(電話號(hào)碼,時(shí)間戳,信息體)。
要監(jiān)聽到來的信息,需要使用一個(gè)監(jiān)聽android.provider.Telephony.SMS_RECEIVED動(dòng)作串的Intent Filter 來注冊(cè)一個(gè)廣播接收 器。如下:
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED動(dòng)作串的Intent Filter";
IntentFilter filter = new IntentFilter(SMS_RECEIVED );
BroadcastReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver ,filter);
Android開發(fā)帶來新一輪熱潮讓很多移動(dòng)開發(fā)者都投入到這個(gè)浪潮中去了,創(chuàng)造了許許多多相當(dāng)優(yōu)秀的應(yīng)用。
其中也有許許多多的開發(fā)者提供了應(yīng)用開 源項(xiàng) 目,貢獻(xiàn)出他們的智慧和創(chuàng)造力。學(xué)習(xí)開源代碼是掌握技術(shù)的一
個(gè)最佳方式。下面推薦幾個(gè)應(yīng)用開源項(xiàng)目,這些項(xiàng)目不僅提供了優(yōu)秀的創(chuàng)意,也可以直接掌握 Android內(nèi)核的
接口使用.
1.Android團(tuán)隊(duì)提供的示例項(xiàng)目
如果不是從學(xué)習(xí)Android SDK中提供的那些樣例代碼開始,可能沒有更好的方法來掌握在Android這個(gè)框架上
開發(fā)。由Android的核心開發(fā)團(tuán)隊(duì)提供了15個(gè)優(yōu)秀的示例項(xiàng)目,包含了游戲、圖像處理、時(shí)間顯示、開始菜單
快捷方式等。
地址:
http://code.google.com/p/apps-for-android/2.Remote Droid
RemoteDroid是一個(gè)Android應(yīng)用,能夠讓用戶使用自己的無線網(wǎng)絡(luò)使用無線鍵盤、觸摸屏操作手機(jī)。這個(gè)項(xiàng)
目為開發(fā)者提供了如網(wǎng)絡(luò)連接、觸摸屏手指運(yùn)動(dòng)等很好的樣例。
地址:
http://code.google.com/p/remotedroid/3.TorProxy和Shadow
TorProxy應(yīng)用實(shí)現(xiàn)了Android手機(jī)無線電電傳通訊(TOR),和Shadow應(yīng)用一起使用,可以使用手機(jī)匿名上網(wǎng)。
從該項(xiàng)目源代碼中,可以 掌握socket連接、管理cookie等方法。
地址:
http://www.cl.cam.ac.uk/research/dtg/code/svn/android-tor/4、 Android SMSPopup
SMSPopup可以截獲短信內(nèi)容顯示在一個(gè)泡泡形狀的窗口中。從這個(gè)項(xiàng)目中可以掌握到如何使用內(nèi)置的短信
SMS接口。
地址:
http://code.google.com/p/android-smspopup/5、 Standup Timer
Standup Timer應(yīng)用用于控制站立會(huì)議時(shí)間,類似秒表倒計(jì)時(shí),可以提醒每個(gè)人的講話時(shí)間已到,從而保證每
個(gè)與會(huì)者使用時(shí)間一樣。從該項(xiàng)目的代碼中,可以學(xué)會(huì)如何 使用時(shí)間函數(shù)。另外,這個(gè)項(xiàng)目的代碼是采用視圖
view、模型model嚴(yán)格分離的設(shè)計(jì)思路。
地址:
http://github.com/jwood/standup-timer6、 Foursquare
http://www.javaeye.com/news Foursquare應(yīng)用主要分為兩個(gè)模塊:API(com.joelapenna.foursquare)和界面前端 (com.joelapenna.foursquared)兩部分。從該項(xiàng)目代碼中,可以學(xué)會(huì)如何同步、多線程、HTTP連接等技術(shù)。
地址:
http://code.google.com/p/foursquared/7、 Pedometer
Pedometer應(yīng)用用于記錄你每天走路步[]數(shù)的。盡管記錄不一定精準(zhǔn),但是從這個(gè)項(xiàng)目中,可以學(xué)習(xí)幾個(gè)不同
的技術(shù):加速器交互、語(yǔ)音更新、后臺(tái)運(yùn)行服 務(wù)等。
地址:
http://code.google.com/p/pedometer/8、 OpenSudoku-android
OpenSudoku是一個(gè)簡(jiǎn)單的九宮格數(shù)獨(dú)游戲。從代碼中可以學(xué)習(xí)到如何在視圖中顯示表格數(shù)據(jù),以及如何和一
個(gè)網(wǎng)站交互等技術(shù)。
地址:
http://code.google.com/p/opensudoku-android9、 ConnectBot
ConnectBot是Android平臺(tái)的一個(gè)客戶端安全殼應(yīng)用。從該項(xiàng)目代碼中,可以學(xué)習(xí)到很多Android安全方面的
內(nèi)容,這些是你在開發(fā)應(yīng)用 時(shí)經(jīng)常需要考慮的安全問題。
地址:
http://code.google.com/p/connectbot/10、 WordPress的Android應(yīng)用
當(dāng)然在最后不能不提Wordpress的Android應(yīng)用了,這是Wordpress官方開發(fā)團(tuán)隊(duì)提供的一個(gè)項(xiàng)目。從代碼中
可以學(xué)習(xí)到XMLRPC調(diào) 用(當(dāng)然還有更多的優(yōu)秀內(nèi)容)。
地址:
http://android.svn.wordpress.org/trunk/注:
該文章轉(zhuǎn)自:http://www.opda.cn/2010/08/23/top-10-open-source-android-apps/