Midlet的Push技术

Push技术的分类
我们知道Application Management Software(AMS)是负责MIDlet的生命周期管理的,包括运行、暂停和销毁等。Push Registry是AMS的一个重要的组件,是AMS的一部分,它提供了Push的应用编程接口并跟踪push注册事件。在MIDP2.0中,Push机 制可以通过如下两种方式激活MIDlet:

1)通过inbound网络连接(就是基于接入的连接的通知)

2)通过基于计时器的时钟(又称基于警告的通知)

PushRegistry应用编程接口
首先我们介绍一下PushRegistry应用编程接口,PushRegistry是通用连接框架(Generic Connection Framework)中的一个类,它提供了所有和push相关的方法。我们这里只是简单列出了主要的方法,读者可以参考MIDP 2.0 的API文档得到更多信息。


方法总结

static String
getFilter(String connection)
        取得指定连接的过滤器

static String
getMIDlet(String connection)
        取得指定连接的注册MIDlet

static String[]
listConnections(boolean available)
        返回当前MIDlet套件中注册的连接列表

static long
registerAlarm(String midlet, long time)
        注册一个计时器来启动参数指定的应用程序

static void
registerConnection(String connection, String midlet, String filter)
        在应用程序管理软件中注册一个动态连接

static boolean
unregisterConnection(String connection)
        删除一个动态连接注册

通过使用PushRegistry我们可以把一个MIDlet注册到Push事件中并可以取得push相关的信息。

在MIDP2.0中,Push的处理是由AMS和MIDlet共同负责的,这样有利于简化AMS的实现,同时也可以避免把信息push到设备的方式和格式限制的过于严格。下面我们了解一下Push处理的过程,首先假设一个MIDlet已经被注册到push事件中:

1)首先,当MIDlet没有被激活的时候,AMS负责监视某个MIDlet的注册事件,一旦注册事件发生的时候,AMS会激活相关的MIDlet来进行下一步的处理。

2)当MIDlet正在运行的时候,MIDlet自己要负责所有的push事件的处理。主要是inbound网络连接和时钟事件。

静态注册与基于inbound网络连接的Push
下面我们将采用讲解和实例结合的方式来说明如何使用Push机制开发J2ME应用程序,

我们将使用SUN提供的Wireless Toolkit(WTK)做为运行环境。

在Push注册中有两种方式:静态注册和动态注册,静态注册是在MIDlet套件安装的时候完成的。你需要通过在MIDlet套件的jad文件中指 定MIDlet-push字段的信息。并且当我们想测试应用程序的时候,不能只是简单的选择RUN,而必须要使用WTK提供的RUN via OTA功能把MIDlet套件通过AMS安装好,然后测试Push功能。

静态注册需要我们在jad文件或者manifest文件中提供MIDlet-push字段的内容,每个push注册实体需要提供如下的内容:

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


MIDlet-Push-<n>是push注册的属性名称,一个MIDlet套件可以有多个Push注册属性。

ConnectionURL是在Connector.open()中使用的连接字符串

MIDletClassName是在Push Registry中进行注册的MIDlet名称,一定要包括包名,例如com.j2medev.push.PushMIDlet。MIDletClassName一定要是在jad文件中记录的。

AllowedSender是用来说明过滤器的,可以对激活MIDlet的来源进行限制。我们可以直接指定ip地址,如192.16.8.0.12。也可 以使用通配符“*”和“?”,其中“*”表示任意地址都可以访问,而“?”代表一个单独的字符串。如192.168.0.?

下面给出一个静态注册的基于inbound连接的Push实例。我们编写一个简单的MIDlet应用程序,并在安装过程中完成静态注册。然后我们起一个socket连接来激活这个MIDlet。整个过程分为注册、监听、运行、处理数据四部分。

注册
使用WTK新建项目命名为push,并指定MIDlet为com.j2medev.push.PushMIDlet。

读者可以使用喜欢的文本编辑器编写一个简单的MIDlet,这里给出的参考代码如下:

package com.j2medev.push;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.*;


public class PushMIDlet extends MIDlet {


    private Display display;


    protected void startApp() throws MIDletStateChangeException {

      

        display = Display.getDisplay(this);

        display.setCurrent(new Form("Push"));

    }


    protected void pauseApp() {

    }


    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

    }

}


通过WTK提供的设置功能编辑Jad文件,把注册信息写入MIDlet-Push字段。


这里提供的Connection URL = socket://:5001,Class=com.j2medev.push.PushMIDlet,Allowed Sender = *。编辑后的jad文件如下:

MIDlet-1: push, push.png, com.j2medev.push.PushMIDlet

MIDlet-Jar-Size: 1329

MIDlet-Jar-URL: push.jar

MIDlet-Name: push

MIDlet-Permissions: javax.microedition.io.PushRegistry

MIDlet-Push-1: socket://:5001, com.j2medev.push.PushMIDlet, *

MIDlet-Vendor: Unknown

MIDlet-Version: 1.0

MicroEdition-Configuration: CLDC-1.0

MicroEdition-Profile: MIDP-2.0


编译项目,正确无误后使用WTK提供的打包功能生成jar文件。这一步我们最重要的是使用wtk提供的RUN via OTA功能把MIDlet安装,这样才可以在安装的时候注册静态连接。从Ktoolbar选择Project->Run via OTA。

这里我们不会详细介绍安装的步骤,当安装结束后WTK会弹出对话框询问push可能会接收网络连接的数据,这是收费操作。读者选择确定就可以了。

监听与启动
现在我们已经完成了静态注册的准备,下面我编写一个简单的Sender程序,目的是向设备建立socket连接,来产生inbound连接。代码如下:

package com.j2medev.socket;

import java.net.Socket;

public class Sender {

    public static void main(String[] args) throws Exception {

        new Socket("127.0.0.1",5001);

    }
}


编译并运行Sender程序,我们将可以看到PushMIDlet被激活的时候弹出的对话框,选择ok,AMS将会激活PushMIDlet。

在MIDP2.0规范中并没有规定设备必须要支持什么协议,inbound连接的协议是具体设备实现相关的。即使设备支持一种连接协议,也不一定支持将他用于Push启动,请读者参考各个厂商的API取得相关信息。一般可以使用如下几种形式:1)基于消息的短消息服务 2)基于流的TCP sockets 3)基于包的数据报。

处理数据
你可能意识到了,我们的程序并没有处理那个激活MIDlet的连接。在一个真正的应用中,被唤醒的MIDlet应该在启动过程中判断自己是被用户打开的还 是被利用push技术唤醒的。如果是被唤醒的,应用程序应该紧接着打开这个连接,处理数据。下面的代码示范了如何判断是否被唤醒:


String connections[]=PushRegistry.listConnections(true);//传入true表示仅仅取得接入的连接

for(int i=0; i< connections.length;i++) {

    //利用这个连接字符串打开连接处理

}

动态注册与基于计时器的Push
动态注册是指通过使用PushRegistry应用编程接口在运行时进行注册。基于时钟和基于inbound连接的两种方式都可以使用动态注册,读者应该知道使用基于时钟的push方式只能通过动态注册。

基于时钟的动态注册比较简单,我们只是简单的调用PushRegistry的静态方法registerAlarm(String MIDlet,long time),这样当指定的时间到达的时候,AMS就会唤醒参数中指定的MIDlet。每个MIDlet只有一个基于计时器的注册,重复调用 registerAlarm会覆盖上次的结果。下面我们给出一种基于时钟的Push动态注册的实例,我们的MIDlet会在程序结束后的10秒钟后自动启 动。


依然使用前面我们新建的push项目,我们只是需要添加另外一个MIDlet命名为PushMIDlet2。代码如下:

package com.j2medev.push;

import java.util.Date;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

public class PushMIDlet2 extends MIDlet {

    private Display display;

    protected void startApp() throws MIDletStateChangeException {

        display = Display.getDisplay(this);

        Form form = new Form("Push");

        form.append("This is a push example");

        display.setCurrent(form);

    }

    protected void pauseApp() {

    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

        scheduleMIDlet(10000);
        display = null;

    }

    private void scheduleMIDlet(long delt)

    {

        try

        {

            Date now = new Date();

            PushRegistry.registerAlarm(this.getClass().getName(),now.getTime()+delt);

        }

        catch(Exception e)

        {

            e.printStackTrace();   

        }

    }

}


jad文件内容如下:

MIDlet-1: push, push.png, com.j2medev.push.PushMIDlet

MIDlet-2: push2, , com.j2medev.push.PushMIDlet2

MIDlet-Jar-Size: 2222

MIDlet-Jar-URL: push.jar

MIDlet-Name: push

MIDlet-Permissions: javax.microedition.io.PushRegistry

MIDlet-Push-1: socket://:5001, com.j2medev.push.PushMIDlet, *

MIDlet-Vendor: Unknown

MIDlet-Version: 1.0

MicroEdition-Configuration: CLDC-1.0

MicroEdition-Profile: MIDP-2.0

重新编译项目、打包并通过RUN via OTA安装新的MIDlet套件。运行push2,这是一个很简单的应用程序。关闭它后系统会提示你是不是允许MIDlet接受自动信息,选择确定即可。10秒后push2会自动启动,表明我们完成了基于时钟方式的动态注册。

使用Push应注意的问题
安全性问题
使用Push增加了用户对安全性的担心。所以对Push的应用是在MIDP2.0的安全框架之下进行的。如果要使用Push需要申请javax.microedition.io.PushRegistry许可。

Push程序需注意的问题
利用Push启动的程序应该明确的和用户交互。一个被Push唤醒并运行在后台的程序会让用户产生很多疑惑。
如果处理inbound连接,应该在一个独立现程中进行。
正确使用Push技术,不要利用基于计时器的Push反复启动程序来检测网络更新,应该使用基于inbound连接的Push

J2ME自学教程:从入门到实战 本文还有配套的精品资源,点击获取 简介:J2ME(Java Micro Edition)是Java平台用于嵌入式和移动设备开发的重要组成部分。本教程涵盖了J2ME开发的各个方面,从基础概念到高级编程技巧。通过循序渐进的章节,初学者将掌握J2ME的环境搭建、MIDlet开发、用户界面设计,以及设备特性的理解和利用。本教程旨在帮助学生从零开始构建自己的J2ME应用程序,为移动世... 阅读详情

相关推荐

MIDLet-Servlet通信

JAVA移动实现与网络服务器端(servlet)通信实现

如何在J2ME中创建MIDlet

总览 Java移动应用程序称为J2ME。 通常,当我们在移动技术领域工作时,我们必须考虑J2ME应用程序。 通过这种方式,我们可以开发我们的移动应用程序,也可以通过jad或jar文件将其安装在我们的设备中。 近年来,手机开发中最大的增强是JavahostedMIDlet的引入。 MIDlet在Java虚拟机上执行,该Java虚拟机抽象出底层硬件,并允许开发人员创建演示文稿,这些演示文稿可以在...

最佳 Java 编程 423

Ansys EMC Plus:用于仿真屏蔽效果的一键式工作流程

在 EMA3D 选项卡下,单击 Shielding Effectiveness 按钮下方的箭头以访问设置并使用所需数量的分割数启动工作流程,这些分割数定义了网格大小。在此示例中,设置了 35 个分段,提供了良好的 FDTD 网格,同时保持了较短的仿真运行时间。接下来,选择默认的平面波源文件,然后选择所需的分析方向。您还可以查看和调整仿真树中的仿真参数,包括定义最低和最高频率值的解域、入射平面波的极化以及探针设置。您可以控制屏蔽效果图设置,并以线性比例显示结果。仿真完成后,软件将绘制与频率相关的屏蔽效果图。

jkh920184196的博客 873

开发过程中生成MIDlet套件,修改MIDlet-Data-Size

前段时间做一个MIDlet,访问互联网应用,提取数据,然后存到RecordStore。在百宝箱里面运行,第一次运行OK,但是第二次运行一直报“内存太低,Java无法启动MIDlet。请删除部分文件以创建更多空间。”仔细查了一下,内存并没有占用厉害,该回收内存的地方也已经回收了。到底原因何在。己经琢磨,发现是在MIDlet JAD文件里面定义的MIDlet-Data-Size太低了,于是将M

gabbler的专栏 1225

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 388

从报错到优化:一次Gauss JDBC参数限制排查实录(32767参数上限避坑指南)

本文详细记录了排查GaussDB JDBC驱动因绑定参数数量超过32767上限而抛出`PSQLException`(报错信息为`Tried to send an out-of-range integer as a 2-byte value`)的全过程。文章深入分析了该限制的底层协议原理,并提供了应用层分批查询、使用临时表以及优化业务逻辑等多种解决方案,旨在帮助开发者规避此参数上限陷阱,构建更稳健的数据访问层。

rgv23456789的博客 220

部署 MIDlet

 开始之前这份教程带您了解各种 MIDlet 部署方法。在阅读教程之前,您应该具有 Java™ 2 Platform,Micro Edition(J2ME)的基本知识。关于本教程在本教程中,您将了解到以下内容: 远程部署。远程部署在本地桌面上开发的 MIDlet。 本地部署。将本地桌面开发的 MIDlet 下载到与其连接的支持 J2ME 的设备。

795

【保姆级教程/代码】使用PRIDE PPP-AR软件解算ZTD、反演GNSS PWV,并评估精度

在本算例中,我下载了BJFS站2024年的IGS ZTD产品,用于评估PRIDE PPP-AR软件解算出ZTD结果的精度。

weixin_43910227的博客 2375

别了j2me-->系统原理之MIDlet

题记 : 现在的J2ME用户已经是日益减少 , 开发也在转型! 无奈之下也不得不写下这系列文章来别了j2me ,也是对过去的一些总结吧! ①: 所有Kjava必须会继承自javax.microedition.midlet.MIDlet类的。其中定义了三个抽象方法(abstract),因此我们撰写的MIDlet必须实现它们。这三个抽象方法是: 1. startApp() 转到运作状态 ...

gaofen100 273

54、生物神经网络建模全解析

本文系统解析了生物神经网络的建模方法,涵盖从单个神经元到神经网络的多个时空尺度。首先介绍神经元层面的生物物理模型(如霍奇金-赫胥黎模型和多隔室模型)与多种简化模型(如菲茨休-纳古莫、莫里斯-勒卡尔、积分发放模型等),并分析其适用场景。随后探讨突触层面的信号传递机制,对比电突触与化学突触在结构、传输速度和方向上的差异,阐述其在神经网络建模中的理论意义。文章旨在为理解神经系统的信息处理机制、构建受生物启发的人工智能模型提供理论基础。

app77的博客 78

Silly Tavern酒馆ai角色卡与世界书导入超详细教程!

前几天,我在设置 Silly Tavern 的时候,想导入一个喜欢的角色卡,结果发现不少朋友其实已经下载好了角色资源,但却不知道怎么正确导入使用。这篇文章就作为一份完整的新手向教程,一步步教你如何在 Silly Tavern 中导入角色卡、世界书,并实现与 AI 角色的真实互动。如果你是第一次接触这个功能,建议先收藏慢慢看~点击菜单栏上的 图标,打开角色界面。初始状态下,你应该只看到默认角色 Seraphina。你可以先点击她的头像尝试聊天,也可以导入自己喜欢的角色。点击导入按钮,选择你下载好的角色卡(通

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2万+

Push技术:No MIDLet- registration原因

 在.jad文件中注明MIDlet-n,n可以是1,2,3...。例: MIDlet-1:Dypush,Dypush.png,push.DynRegPushMidlet(类的路径)

noICE1的专栏 498

高分SCI讨论部分必学AI写作套路!仅需五步结合GPT‑5辅助,让你的SCI论文更有说服力(附实用AI提示词)

对于很多写SCI论文的学术人来说,其实“讨论部分”才是最致命的,网上虽然有大量的写作技巧和模板提供参考,但往往让人眼花缭乱,还是不知道如何下手。即便是下手了,也很难兼顾学术性与可读性,实际上讨论部分的难点并不在于写,而在于你能研究结果说清楚。今天七哥教你借助GPT-5,用五步法结合精心设计的AI提示词,让你能在科学逻辑与语言表达上一次性解决“讨论部分”的结构、内容、润色和翻译问题,轻松写出符合高分SCI期刊要求的讨论段落。

智能AI让学术科研更容易 1334

J2ME中文教程 9 MIDP 2 Push技术

作者:mingjava  文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=2709.1    Push技术概述Push技术是一种通过异步方式将信息传送给设备并自动启动MIDlet程序的机制。通常我们进行网络连接的时候,是客户端主动去连接服务器,服务器处理请求并返回给客户端响应,这是同步处理机制。而Push技术不同,它不需要

mobilechannel的专栏 1356

优化YOLOv8检测精度:Damo-YOLO的RepGFPN特征融合技术解析【YOLOv8】

YOLOv8在结构上依旧延续了自YOLOv4以来的CSPNet(Cross Stage Partial Network)和FPN(Feature Pyramid Network)的设计,结合了PANet(Path Aggregation Network)来增强特征的多尺度表达。然而,随着目标检测任务的复杂性增加,如何更有效地融合不同层级的特征成为提升检测性能的关键。Damo-YOLO中的RepGFPN引入了重参数化的思想,通过在训练和推理阶段对特征融合模块进行结构优化,显著提升了检测效果。

博客 1583

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

通过SMS-Push技术激活J2ME程序

Push技术是一种通过异步方式将信息传送给设备并自动启动MIDlet程序的机制。通常进行网络连接时,客户端主动去连接服务器,服务器处理请求并返回给客户端响应,这是同步处理机制。而Push技术不同,它不需要应用程序通过“拉”的方式从网络中取得数据,应用程序需要的数据会被主动“推”向设备。当设备接收到信息时,相关的MIDlet会被激活并开始运行,处理发送过来的数据。注意:Push技术是MIDP2.0...

jlins_you的专栏 240

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

J2ME PUSH技术

一直以来都在JavaEye上看别人的文章,在开发中当遇到技术问题首先想到的是到JavaEye上寻找答案。很多时候都是满意而归。在此感谢不管是GG JJ DD MM 分享的技术资料,真的谢谢你们。今天我也分享一下我在开发J2ME Push 技术时的一些心得吧。由于本人水平有限,在下面的论述中难免有不足处,望各位轻拍。     Push 技术是一种通过异步方式将信息传送给设备并自动启动 MI...

liwy_finder的博客 432

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

开机就能自动启动MIDlet

开机自启动功能是通过Push注册来完成的,因此可以使用两种方式来注册。第一种通过在jad文件注明PUSH注册的方式即可,如下。//MIDlet-Push-: , , MIDlet-Push-1: autostart://:, AutoStartStatic, *请注意URL的写法是autostart://:  如果想动态注册,可以通过下面的方法。//Registers the pu

yongzhewuwei_2008的专栏 895

Push短信息自动启动JAVA移动程序

使用Push短信息自动启动JAVA移动程序 编辑:rocks    审核:rocks    文章来源:Chinaitlab关键词:wma, pushregistry    发表日期:2006-10-14 03:03:22    浏览次数:3590次

yongzhewuwei_2008的专栏 2374

开机自动启动MIDlet J2ME push

开机自启动功能是通过Push注册来完成的,因此可以使用两种方式来注册。第一种通过在jad文件注明PUSH注册的方式即可,如下。//MIDlet-Push-: , ,MIDlet-Push-1: autostart://:, AutoStartStatic, *请注意URL的写法是autostart://:如果想动态注册,可以通过下面的方法。//Registers the pushRegistryp

网络 396

通过Push信息来自动启动JAVA移动应用程序

移动技术日渐流行。Java微小版本,或者叫Java ME(Sun的J2ME平台的新名字),是最流行的开发移动应用程序的技术之一。使用Java ME,我们可以在使用JVM或KVM的手持设备上运行多种无线应用程序。Connected Limited Device Configuration (CLDC)被包含在Java ME中,它是面向那些只拥有有限资源,使用KVM的设备。同样,Mobile

845

技术文档:MIDP 2.0安全机制 与 MIDlet 数字签名

MIDP 2.0安全机制 与 MIDlet 数字签名 本文档是 WoTrust 根据 Forum Nokia 提供的技术文档《MIDP 2.0: Tutorial On Signed MIDlets》翻译整理的,请同时参考此英文原文文档: http://www.wotrust.com/support/resou...ts_v1_1_en.pdf 。请用户在编写 MID

无花的专栏 512

MIDP 2.0安全机制 与 MIDlet 数字签名

MIDP 2.0安全机制 与 MIDlet 数字签名

Working harder, getting stronger! 901
上一篇: Android和j2me的初级对比
下一篇: Android中ProgressDialog的使用
sky_code
博客等级 码龄20年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值