移动终端为了节省电量和网络流量,不再采用轮训服务器的方式来收集数据,而是在服务器有数据需要发送到终端时通知终端。我们称这种机制叫推送 (push)。终端接收到通知消息,如果客户端应用正则运行,则连接服务器接收数据,即使客户端程序不在运行状态,也可以启动客户端程序去接收说句,或者 以一定的方式通知用户服务器有数据变化。
成都创新互联主打移动网站、网站制作、成都网站设计、网站改版、网络推广、网站维护、域名注册、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。
短信(SMS)Push 和 Ip push是比较常见的两种push方式。
本篇主要简单说说SMS push。
Sms push的原理:
sms push是通过发送二进制短信到移动终端,来达到通知终端的目的。客户端拦截这类短信,分析短信PDU的数据,然后采取相应的操作。push短信是通过 Wap push来承载的。其内容包括头部和数据两部分,头部中应该含有目的端口和原端口号(可类比IP报文)。
由于发送短信需要运营商的支持,比如移动的邮件推送网关(GEGW:GPRS Email Gateway),依赖性比较强。
Android客户端拦截短信处理:
客户端静态注册一个广播接收器,即使应用不在运行,广播接收器也能拦截短信。
这样当push短信下发时(监听到端口16001的数据),系统发起Intent激活广播接收器,广播接受器在其事件回调函数中进行处理
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (TextUtils.equals(action, "android.intent.action.DATA_SMS_RECEIVED")) {
- handleDataSmsReceived(context, intent);
- }
- }
在处理函数handleDataSmsReceived中,获取pdu数据并解析,了解服务器的数据发生何种变化,客户端可以进行相应处理。
简易实现代码如下:
- private void handleDataSmsReceived(Context context, Intent intent) {
- Uri uri = intent.getData();
- int port = uri.getPort();//接受端口 16001
- SmsMessage[] msgs = getMessagesFromIntent(intent);
- String senderNumber = msgs[0].getOriginatingAddress();//短信发送方的电话号码
- int type = parse(msgs)//解析 pdu的业务部分数据,根据与服务器交互的协议去解
- switch(type){
- //不同的情况分类处理
- }
- }
获取的短信的方法
- private static final SmsMessage[] getMessagesFromIntent(Intent intent) {
- Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
- byte[][] pduObjs = new byte[messages.length][];
- for (int i = 0; i < messages.length; i++) {
- pduObjs[i] = (byte[]) messages[i];
- }
- byte[][] pdus = new byte[pduObjs.length][];
- int pduCount = pdus.length;
- SmsMessage[] msgs = new SmsMessage[pduCount];
- for (int i = 0; i < pduCount; i++) {
- pdus[i] = pduObjs[i];
- msgs[i] = SmsMessage.createFromPdu(pdus[i]);
- }
- return msgs;
- }
Pdu的格式本文不作讨论,网上可以找到相关资料,android源码类SmsMessage也有代码实现。
总结:
android短信push的关键在于拦截短信,一旦拦截到了短信,可以利用android自带的特性去完成后续操作,比如可以Push notification,可以Toast,可以发起连接服务器的请求,客户端应用不在线时,可以发一个Intent启动该应用然后再进行处理。
网页名称:Androidpush:SMSpush
标题网址:http://www.shufengxianlan.com/qtweb/news11/400061.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联