1.在Android中,SMS消息传递是由SmsManager进行处理的。可以通过静态方法SmsManager.getDefault()来获得对SmsManager的引用,如下:
SmsManager smsManager = SmsManager..getDefault();
2.Android中,要接收和发送SMS需要以下两个权限
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
3.SMS的发送
1) 发送文本信息,可以使用SMS Manager 中的sendTextManager 的方法
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
参数如下:
destinationAddress:接收方的手机号码
scAddress:发送方的手机号码
text:信息内容
sentIntent:发送是否成功的回执,会在消息发送成功或者失败后触发。
DeliveryIntent:接收是否成功的回执,当目标接收人收到你的信息后触发。
2)跟踪和确认SMS消息的发送
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
参数sentlntent的返回码如下:
Activity.RESULT_OK:表示发送成功
RESULT_ERROR_GENERIC_FAILURE :表示发生了为指定的错误
RESULT_ERROR_RADIO_OFF :表示连接的无线信号被 关闭
RESULT_ERROR_NULL_PDU:表示PDU错误
3)发送SMS以及监控它的发送过程是否成功的经典示例:
String SEND_SMS_ACTION = "SENT_SMS_ACTION";
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
//创建senTIntent参数
Intent sentIntent = new Intent(SEND_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(), 0, sentIntent, 0);
//创建deliveredIntent参数
Intent deliveredIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent delivePI = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveredIntent, 0);
//注册广播器
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));
//注册广播器
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个字符,比它大的信息会被分割为多个小的部分。SMS Manager的divideMeaasge方法可 以接收一个字符串作为输入,并把他分割到一个消息的ArrayList中,每一个消息都比允许的最大长度小。使用sendMultipartTextM essage可以发送消息数组。如下:
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)发送数据消息
使用SMS Manager的sendDataMessage方法,可以经由SMS来发送二进制数据。
sendDataMessage与sendTextMessage方法相似,前者需要额外的参数:信息到达的目的端口和由你想发送的数据所组成的一个 字节数组
short destinationPort = 80;
byte[] data = [...you data ...];
smsManager.sendDataMessage(sendTo,null,destinationPort ,data,sentPI,null);
4.SMS的监听
SMS广播Intent包含了收到的SMS的详细信息。要提取封装在SMS广播的SmsManager对象,需要使用PDU密钥来提取一个SMS
pdus数组,其中每一个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]);
}
每一个SMS Manager对象都包含了SMSManager信息的详细内容(电话号码,时间戳,信息体)。
要监听到来的信息,需要使用一个监听android.provider.Telephony.SMS_RECEIVED动作串的Intent Filter 来注册一个广播接收 器。如下:
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED动作串的Intent Filter";
IntentFilter filter = new IntentFilter(SMS_RECEIVED );
BroadcastReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver ,filter);
posted @
2011-05-20 00:38 3ant 阅读(1930) |
评论 (0) |
编辑 收藏
Android开发带来新一轮热潮让很多移动开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用。
其中也有许许多多的开发者提供了应用开 源项 目,贡献出他们的智慧和创造力。学习开源代码是掌握技术的一
个最佳方式。下面推荐几个应用开源项目,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的
接口使用.
1.Android团队提供的示例项目
如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上
开发。由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单
快捷方式等。
地址:
http://code.google.com/p/apps-for-android/2.Remote Droid
RemoteDroid是一个Android应用,能够让用户使用自己的无线网络使用无线键盘、触摸屏操作手机。这个项
目为开发者提供了如网络连接、触摸屏手指运动等很好的样例。
地址:
http://code.google.com/p/remotedroid/3.TorProxy和Shadow
TorProxy应用实现了Android手机无线电电传通讯(TOR),和Shadow应用一起使用,可以使用手机匿名上网。
从该项目源代码中,可以 掌握socket连接、管理cookie等方法。
地址:
http://www.cl.cam.ac.uk/research/dtg/code/svn/android-tor/4、 Android SMSPopup
SMSPopup可以截获短信内容显示在一个泡泡形状的窗口中。从这个项目中可以掌握到如何使用内置的短信
SMS接口。
地址:
http://code.google.com/p/android-smspopup/5、 Standup Timer
Standup Timer应用用于控制站立会议时间,类似秒表倒计时,可以提醒每个人的讲话时间已到,从而保证每
个与会者使用时间一样。从该项目的代码中,可以学会如何 使用时间函数。另外,这个项目的代码是采用视图
view、模型model严格分离的设计思路。
地址:
http://github.com/jwood/standup-timer6、 Foursquare
http://www.javaeye.com/news Foursquare应用主要分为两个模块:API(com.joelapenna.foursquare)和界面前端 (com.joelapenna.foursquared)两部分。从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。
地址:
http://code.google.com/p/foursquared/7、 Pedometer
Pedometer应用用于记录你每天走路步[]数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同
的技术:加速器交互、语音更新、后台运行服 务等。
地址:
http://code.google.com/p/pedometer/8、 OpenSudoku-android
OpenSudoku是一个简单的九宫格数独游戏。从代码中可以学习到如何在视图中显示表格数据,以及如何和一
个网站交互等技术。
地址:
http://code.google.com/p/opensudoku-android9、 ConnectBot
ConnectBot是Android平台的一个客户端安全壳应用。从该项目代码中,可以学习到很多Android安全方面的
内容,这些是你在开发应用 时经常需要考虑的安全问题。
地址:
http://code.google.com/p/connectbot/10、 WordPress的Android应用
当然在最后不能不提Wordpress的Android应用了,这是Wordpress官方开发团队提供的一个项目。从代码中
可以学习到XMLRPC调 用(当然还有更多的优秀内容)。
地址:
http://android.svn.wordpress.org/trunk/注:
该文章转自:http://www.opda.cn/2010/08/23/top-10-open-source-android-apps/
posted @
2011-05-19 14:57 3ant 阅读(369) |
评论 (0) |
编辑 收藏
一、编码设置:
1:对工作区workspace进行编码设置,window-->preferences 设置 如下图:
-------------------------------------
2:对工程project进行编码设置 工程名 右键 properties 设置如下图:
-------------------------------------
3:但此时你会发现设置了这两情况之后还是会出现乱码,因为上面这两种方式只是对text类型的文件编码进行了设置。其他的(如jsp)等的编码还是默认的(可能与workspace和project所设置的编码不一样,如ISO-8859-1)。此时,我们需要对内容类型(ContentType)下的各种类型的文件(如jsp、html...)进行设置,window-->preferences 如下图:
-------------------------------------
二:eclipse 方法自动提示设置:
window-->
三:相同变量名高亮显示设置:
window-->
四:文件默认打开方式设置:
window-->
Over.
posted @
2010-01-14 10:58 3ant 阅读(975) |
评论 (0) |
编辑 收藏