当前位置: 首页 > news >正文

保护自己的MIDlet程序

作者:黑洞 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=882

大家是如何保护自己的引用程序的呢?
看到一些游戏的保护方式有些是允许运行一次,有的有时间限制。
他们是如何做到的呢?是不是每次都要去写那些千篇一律的代码呢?
我就研究了一个自己的解决方案:Protector。

这些Protector有一个公共的基类:Protector
他是这样的:

package vmlinux.app;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;

public class Protector implements CommandListener {
public static final String NameRMS="PROTECTOR";

MIDlet app_;
Displayable ui_;
Command cmdOK_;

public Protector(MIDlet app)
{
app_=app;
cmdOK_=new Command("OK",Command.SCREEN,2);
}

public boolean check()
{
showUI();
return false;
}

protected void showUI()
{
if(ui_==null)
ui_=new ProtectorUI();
ui_.addCommand(cmdOK_);
ui_.setCommandListener(this);
Display.getDisplay(app_).setCurrent(ui_);
}

public void commandAction(Command c, Displayable d) {

if(c==cmdOK_)
app_.notifyDestroyed();
}

}

他的任务就是处理一些公共事务。

接下去就来实现一次性的保护:OnceProtector
如何实现一次性保护呢?如何知道是否已经运行过了呢?
我们需要一个地方存储一些标志已经运行过的标记。
哪里合适呢,RMS/HTTP。通过HTTP连接把信息存到服务器虽然好
但是限制了程序的应用场合,没有开通网络的手机便无法使用。
所以还是用RMS来解决吧。
虽然有些欠缺,比如用户可以通过删除rms记录来重新运行,但这恐怕是唯一的选择。

下面来实现OnceProtector。

package vmlinux.app;

import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.*;

public class OnceProtector extends Protector {


public OnceProtector(MIDlet app)
{
super(app);
}

public boolean check() {
boolean r=true;
try
{
RecordStore rs=RecordStore.openRecordStore(NameRMS,true);
RecordEnumeration e=rs.enumerateRecords(null,null,false);
if(e.hasNextElement())
{
showUI();
r=false;
}
else
{
writeTag(rs);
r=true;
}
rs.closeRecordStore();
}
catch(Exception ex)
{
r=false;
}
return r;
}

}

在程序中加入保护:startApp的第一行加入if(!new OnceProtector().check())return;

动动脑筋再实现TimeProtector,SNProtector

有问题或建议请联系vmlinuxx@gmail.com,共同学习,共同提高:)

相关文章:

  • 深入学习之非关系数据库
  • 深入学习之http
  • 实战程序管理器和多语言程序
  • 深入学习之闭包和bind 原型重写
  • 浏览器的渲染过程
  • J2ME-定时器(TimerTask)使用及初探
  • 深入学习之改变this的方法
  • 使用J2MEUnit测试J2ME程序
  • 深入学习之图片预加载 和 闭包新认知
  • NetBeans 4.0创建J2ME手机RSS阅读器
  • J2ME游戏 之 NORMAL-FRAME
  • 深入学习之git操作
  • 开发NokiaS40系列应用程序初级篇
  • 深入学习之重写call方法
  • 深入学习之this 方法1
  • “大数据应用场景”之隔壁老王(连载四)
  • 5、React组件事件详解
  • Android 控件背景颜色处理
  • crontab执行失败的多种原因
  • express + mock 让前后台并行开发
  • GitUp, 你不可错过的秀外慧中的git工具
  • GraphQL学习过程应该是这样的
  • Spring核心 Bean的高级装配
  • vue总结
  • 从零开始在ubuntu上搭建node开发环境
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​渐进式Web应用PWA的未来
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (汇总)os模块以及shutil模块对文件的操作
  • (转)jdk与jre的区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net 无限分类
  • .sys文件乱码_python vscode输出乱码
  • @ConfigurationProperties注解对数据的自动封装
  • @PreAuthorize注解
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [BJDCTF 2020]easy_md5
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [hdu 3652] B-number
  • [HDU]2161Primes
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [Java][Liferay] File system in liferay
  • [linux运维] 利用zabbix监控linux高危命令并发送告警(基于Zabbix 6)
  • [MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择
  • [NISACTF 2022]sign-ezc++
  • [Quest ActiveRoles Management Shell for Active Directory] QADProxyAddress命令相关的bug。