`
wuhua
  • 浏览: 2115899 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

MIDP2.0引入了Push注册机制,作为一种允许应用被自动启动的方法,由预先设置的警告或者经inbound连接收到的消息。 通过这种方法,MIDlets可以用来设置处理规则事件,如定时从服务器上同步数据,或者非规则事件如一个突来的消息。

  Push注册机制由javax.microedtion.io.PushRegistry类管理,它还是应用程序管理系统——它处理所有事件——的一部分。 警告事件通过指定MIDlet名称和启动时间进行注册。对于任何MIDlet只能注册一个警告事件,因此注册一个新的警告会重写注册机制中以前的任何警告。这种情况可以被检测到,因为若原来存在警告,注册方法会返回被重写的警告的时间。

  无线消息API(Wireless Messaging API)可以和Push注册机制联合使用,通过消息监听器来处理到来的消息,消息监听器实现在AMS启动MIDlet后处理消息有效载荷的逻辑。在这种情 况下,MIDlet会注册一个特定的端口号和消息类型作为启动MIDlet的触发器,AMS监视端口的行为,以寻找在该端口上的正确网络请求。另外,注册 的连接可能被过滤,允许MIDlet指定只有来自特定服务器的连接作为启动MIDlet的触发器。

  使用Push注册机制的效果

  如果警告到来时,注册了这个警告的MIDlet正在运行中,那么这个MIDlet会继续运行,而警告会被忽略。如果MIDlet没有运行,它就会被启动。

  类似地,如果inbound连接出现时,而注册了这个连接的MIDlet也已经在运行中,MIDlet会处理那个连接(若代码指定了,就包括任何消息的有效载荷),就不再提交给用户。

  如果没有MIDlet在运行中,用户会收到消息的通知,并且会被给予是否运行MIDlet的选择。

  如果另外一个MIDlet在运行中,用户会被给予是否运行与这个消息相关的MIDlet的选择:若选择运行,就会终止当前运行的MIDlet。

  如果收到多个消息,AMS会排队等候到5,并且传递要读取的选择,依顺序按消息进行操作,包括联合push动作。
 
  如果没有应用程序被注册为push,到来的push消息会被忽略。

       方法

  PushRegistry类包含了以下的方法:

  ·getFilter(),为连接返回一个<AllowedSender>值(可能是一个服务器IP地址、一个以逗号分割的IP地址列表,或者一个“*”表示允许任何连接)。

  ·getMidlet(),返回为特定的连接注册的MIDlet名称。

  ·listConnections(),返回为特定的MIDlet套件push连接列表。

  ·registerAlarm(),注册一个基于定时器的触发器来启动MIDlet,或者若变量被设置为0,则取消对MIDlet已经存在的警告 l registerConnection(),为MIDlet注册一个连接

  ·unregisterConnection(),同样取消一个连接的注册

  异常

  应该捕获异常有:

  ClassNotFoundException、ConnectionNotFoundException、IllegalArgumetException、IOException和SecurityException。

  ConnectionNotFoundException和IOException可能遇到,因为请求端口或者连接类型可能不会连续可用,因此应该为这种情况编写处理代码。

  网络连接和push注册机制是特别的操作,MIDlet在使用它们之前必须有正确的许可,因此需要捕获SecurityException。

  连接(Connection)

  连接包括三种类型:TCP Socket,UDP数据包或者SMS。

  当前在所有的Motorola手机范围内,只有SMS是适合于inbound连接的可用类型。 UDP数据包只能用于最新的手机(2005年后半年发行的,例如,V3X、E1070,等等)。从这点出发,这篇文章将不会讲解TCP Socket,而对UDP数据包也只是有少许讲解。

  使用SMS连接

  注意到以下的这点是很有用的,如果需要进一步的数据交换,在被到来的消息唤醒后,MIDlet可以初始化一个Socket或者HTTP连接。

  指定的端口可以是从1到65535的范围中的任何一个,然而下面的端口是被保留的,必须不能使用:

  2805 WAP WTA安全非连接会话服务

  2923 WAP WTA 安全会话服务

  2948 WAP Push无连接会话服务(客户端)

  2949 WAP Push安全无连接会话服务(客户端)

  5502 Service Card Reader

  5503 因特网访问配置阅读器

  5508 动态菜单控制协议(Dynamic Menu Control Protocol)

  5511 消息访问协议(Message Access Protocol)

  5512 简单邮件通知(Simple e-mail 通知)

  9200 WAP无连接会话服务

  9201 WAP会话服务

  9202 WAP安全无连接会话服务

  9203 WAP安全会话服务

  9207 WAP vCal安全 49996 SyncML OTA 配置

  49999 WAP OTA配置

  注意:上面的端口号不能注册为任何其它类型的动作,否则注册请求会失败。参考JSR 120无线消息API(Wireless Messaging API),A.6.0部分给出了一个保留端口的权威列表。

  使用数据包连接

  开发者必须清楚,网络上的限制条件可能会阻碍传递给一个正在监听的设备的UDP/IP数据包通信量。

  大部分的操作者使用DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)只为活动的用户分配IP地址。一个活动的用户可以是一个启动网络应用程序的用户,或者是使手机建立PDP上下文的浏览器,如果没有建立 的PDP上下文,你也不可能拥有任何IP地址。

  另外,你的移动设备被(操作者)分配的实际的IP地址很可能是10.x.x.x或者192.168.x.x等保留范围中一个,针对这些保留IP范围的规范就是任何外部的路由器遇到这个IP地址时会丢弃数据包不再发送。

  当然,也有一些情况会按照预期工作,但是最可靠的选择是使用SMS作为MIDlet触发器,那么MIDlet应该建立一个支持的连接以得到预期的数据。

  使用警告

  警告由完整的MIDlet名称和一个与Date.getTime()方法得到整数同样格式的长整数(自从1970年1月1号到现在的毫秒数)指定。

  注册

  Push注册机制可以处理请求来注册连接通过两种方式:运行时的动态注册和JAD文件中条目静态注册。

  动态注册

  动态注册是一个MIDlet在运行时通知AMS,它希望被到来的网络连接激活或者警告事件,MIDlet应该先于事件发生退出。

  注册连接,要使用registerConnection方法:

  registerConnection(String connection, String midlet, String filter)

  并且可以使用this.getClass().getName()指定当前的MIDlet.

  注册警告,要使用registerAlarm方法:

  registerAlarm(String midlet, long time)

  并且now.getTime() + (1000 * 60 * 60)可以被用来指定警告时间,从现在开始一个小时(以毫秒形式)。 动态注册例子:

registerConnection(“sms://:” + portNumber);
registerConnection(“datagram://:” + protNumber);
  静态注册

  如果一个连接发送者和连接类型在MIDlet安装时可以知道,注册请求在安装时完成,因此被认为静态的。静态请求在JAD文件中使用Midlet-Push-<n>属性定义:

  MIDlet-Push-<n>: <ConnectionURL>, <MIDletClassName>, <AllowedSender>

  n是一个顺序数,允许声明多于一个连接,ConnectionURL是用来监视到来的连接的URL,MIDletClassName是要启动的MIDlet,AllowedSender是过滤器:IP地址列表或者“*”(任意地址)。SMS连接的例子:

  MIDlet-Push-1: sms://:10000, TestMIDlet, *

  数据包例子:

  MIDlet-Push-2: datagram://:50000, TestMIDlet, *

  “*”在IP地址中也可以用作通配符,所以像142.100.200.*或者142.*也可以用来指定地址组。

  警告必须要动态注册,那么就没有静态注册的等价物。

  取消注册

  动态注册可以通过使用unregisterConnection移除,只需要指定连接:

  unregisterConnection(“sms://:10000”);

  静态注册只有在安装时可被改变,因此顺序是卸载MIDlet,改变JAD属性然后重新安装MIDlet。卸载MIDlet总是会移除所有静态注册。

  例子

  为了确定MIDlet是否被到来的信息调用:

  在startApp():

String connectsFound[];
connectsFound = PushRegistry.listConnections(true);
  上面的代码返回注册的连接列表。

if (connectsFound == null || connectsFound.length == 0)
{
 ~由用户启动、编码来推出或者忽略push相关动作~
}
else
{
 ~由inbound连接启动,因此编码为Push注册机制初始化~
}
  为了定时一个警告动作

  在这个线程入口点的run()方法中:

private void scheduleMIDlet(long targettime)
throws ClassNotFoundException, ConnectionNotFoundException, SecurityException
{
 String md = this.getClass().getName();
 Date alarm = new Date();
 long tm = PushRegistry.registerAlarm(md, alarm.getTime() + targettime);
  在清除和释放资源后destroyApp():

scheduleMIDlet(defaultDeltaTime);

分享到:
评论
3 楼 jyasa 2009-07-30  
现在只有无花等老一代JavaEye前辈会贴这些东西了
支持,辛苦了无花
2 楼 joeyhacker 2009-07-23  
现在支持push的手机很多啊, 索爱的基本都支持
1 楼 longzy 2009-06-19  
说实话,我一直在研究 这个 push 的应用,一直没有想到什么好点子,而且手机支持的又少,

Apush 给B, B 没有反应,B说写软件写的差,其实是手机不支持,这种事情很痛苦

相关推荐

    wappush.rar_WAPpush_java push_push_wap push_wap push java

    综上所述,"wappush.rar_WAPpush_java push_push_wap push_wap push_java"是一个关于使用Java技术实现WAP Push服务的项目,其中可能包含了JSP页面和JavaBean组件,用于处理推送消息的生成和发送。这个项目可以帮助...

    jquery中push()的用法(数组添加元素)

    push()方法的用法和普通的JavaScript数组的push()方法相同,都允许开发者向一个数组的末尾添加一个或多个元素,并且该方法会修改原数组,返回修改后数组的新长度。需要注意的是,jQuery的push()方法实际上是对...

    push推送浅析

    push推送浅析 推送技术是移动应用程序中的一种重要技术,它允许应用程序在运行时接收来自服务器的消息,以便及时地更新应用程序的状态或进行其他操作。下面我们将详细地分析push推送技术的实现过程。 推送技术的...

    Uniapp集成UniPush.rar

    【标题】:Uniapp集成UniPush 在移动应用开发中,实时的消息推送是提升用户体验、增强用户粘性的重要手段。Uniapp是一个跨平台的前端框架,它允许开发者使用一套代码来构建iOS、Android以及Web等多个平台的应用。而...

    ionic2 codepush热更新使用

    ### ionic2 codepush热更新使用 #### 一、概述 在移动开发中,热更新是一种非常实用的技术,它能够实现在不重新提交应用商店的情况下更新应用的部分代码或资源,从而极大缩短修复bug或更新功能的时间。本篇文档将...

    push mail介绍说明

    ### Direct Push邮件技术详解 #### 一、Direct Push概述 Direct Push是一种先进的电子邮件技术,它允许用户的移动设备(如智能手机和平板电脑)自动接收新邮件,而无需用户手动触发检查新邮件的操作。这一功能极大...

    中控智慧身份识别一体机二次开发PUSH协议文档及demo

    《中控智慧身份识别一体机二次开发PUSH协议解析与实战》 中控智慧作为智能安防领域的领军企业,其身份识别一体机凭借精准高效的识别能力备受赞誉。在深入开发和集成此类设备时,掌握“中控智慧身份识别一体机”的二...

    unipush 推送消息服务端接口支撑(1.0版本,免费)

    关于unipush推送消息,手机端接收消息并且展示通知栏的服务端代码资源。 适用于App消息推送,支持在线离线推送消息。适用场景多元化(只需要用户登录App时进行用户信息和手机设备id绑定的处理) 首先要引入unipush的...

    push系统总体架构图.ppt

    Push 系统总体架构图 Push 系统是一种基于云端服务的消息推送系统,旨在提供实时、可靠、安全的消息推送服务。下面是 Push 系统的总体架构图: 架构图概要 Push 系统架构图可以分为以下几个部分: 1. 客户端...

    uni-app 中使用uni push的demo

    【uni-app 中使用uni push的全面解析】 uni-app是一款由DCloud(海豚浏览器团队)开发的多端统一开发框架,它允许开发者使用Vue.js语法编写一次代码,就能跨平台运行到iOS、Android、H5、小程序等多个平台。而uni ...

    pc端快速push文件到安卓bat

    标题 "pc端快速push文件到安卓bat" 描述的是一个Windows平台下的自动化脚本,用于便捷地将文件推送到安卓设备。这个过程主要利用了Android Debug Bridge(ADB)工具,这是一个强大的开发者工具,允许用户通过USB连接...

    C#结合unipush的服务端消息推送demo

    在本文中,我们将深入探讨如何使用C#与Unipush服务端进行消息推送,以便为Android应用程序提供实时通知。Unipush,也称为个推,是中国一家提供专业推送服务的公司,其SDK允许开发者轻松地在移动应用中实现消息推送...

    adb push不支持中文乱码的解决方案

    1.android adb push不支持中文乱码的解决方案. 2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一...

    用sms发mms、WAP PUSH等资料

    在IT行业中,短信(SMS)和彩信(MMS)是两种常见的移动通信技术,而WAP PUSH则是一种用于向移动设备发送数据的服务。这里我们将深入探讨这些技术的工作原理、应用场景以及它们之间的关联。 首先,短信(Short ...

    sap2000pushover分析

    ### SAP2000 Pushover 分析详解 #### 一、引言 SAP2000 是一款广泛应用于土木工程领域的高级结构分析与设计软件。它支持多种类型的线性和非线性分析方法,包括静力分析、动力分析、模态分析等。其中,Pushover ...

    uniapp利用unipush+个推sdk服务端实现,后端代码是整合Thinkphp+RestAPI V2(完整版)

    在本文中,我们将深入探讨如何在uniapp项目中利用unipush和个推SDK服务端实现推送功能,并结合Thinkphp + RestAPI V2构建后端系统。uniapp是一款跨平台的移动应用开发框架,它允许开发者用一套代码库来创建iOS、...

    helm-push_0.9.0_linux_amd64.tar.gz

    标题中的“helm-push_0.9.0_linux_amd64.tar.gz”是一个软件分发包,用于在Kubernetes环境中管理应用部署。Helm是Kubernetes的包管理工具,它允许用户通过图表来安装、升级和管理在集群上的应用程序。"push"功能可能...

    ZKTeco门禁安防push协议开发协议文档2020版

    《ZKTeco门禁安防push协议开发协议文档2020版》是针对ZKTeco门禁安防设备进行二次开发的重要参考资料,旨在帮助开发者理解和实现与ZKTeco安防设备的高效通讯。这份文档详细介绍了PUSH SDK的各个版本更新内容以及相关...

    韩国移植游戏PUSHPUSH

    《PUSHPUSH》是韩国的一款益智类游戏,其移植技术是游戏开发中的一个重要环节,尤其是在当前多平台共存的时代。移植游戏意味着将一个游戏从一个操作系统或硬件平台转换到另一个,以满足不同用户群体的需求。这个过程...

    水晶报表pull和push方法实现源代码

    在水晶报表中,"Pull"和"Push"方法是两种不同的数据获取策略,它们各自有着不同的特点和应用场景。 1. **Pull方法**: Pull方法也被称为“拉”模式,它是由水晶报表自身从数据源中检索数据。在这种模式下,水晶...

Global site tag (gtag.js) - Google Analytics