




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可达0OverView:程序通过后台每天检查是否有最新版本,如果需要更新当前版本,将弹出对话框让用户选择是否在当前通过Market来更新软件。Knowledge Points: SharedPreferences: 一个轻量级的存储方法,类似于经常使用的.ini文件,它也是通过检索关键字来取得相应的数值。之所以是成为轻量级,是因为它所能应用的数值类型有限,对于存储较大数值,效率相对较低。官方参考 System.currentTimeMillis:将当前时间以毫秒作为单位来表示,用于比较两个时间的先后顺序。(其数值表示从1970-01-01 00:00:00直到当前时间的总毫秒数)官方参考 通过网络来读取信息:在checkUpdate()方法中包含了通过制定的URL来读取网络资源。具体操作步骤,请参考源代码。 Runnable: 在其内部的Run()方法中实现所要执行的任何代码,当这个runnable interface被调用后可以视作为新的线程。Source Code:1. public class hello extends Activity2. /* Called when the activity is first created. */3. private Handler mHandler;4. 5. Override6. public void onCreate(Bundle savedInstanceState) 7. super.onCreate(savedInstanceState);8. setContentView(R.layout.main);9. 10. mHandler = new Handler();11.12. /* Get Last Update Time from Preferences */13. SharedPreferences prefs = getPreferences(0);14. long lastUpdateTime =prefs.getLong(lastUpdateTime, System.currentTimeMillis();15.16. int curVersion = 0;17. try 18. curVersion = getPackageManager().getPackageInfo(.hello, 0).versionCode;19. catch (NameNotFoundException e) 20. / TODO Auto-generated catch block21. e.printStackTrace();22. 23. Log.i(DEMO,String.valueOf(curVersion);24. /* Should Activity Check for Updates Now? */25. if (lastUpdateTime + (24 * 60 * 60 * 1000) curVersion) 63. /* Post a Handler for the UI to pick up and open the Dialog */64. mHandler.post(showUpdate);65. 66. catch (Exception e) 67. 68. 69. ;70.71. /* This Runnable creates a Dialog and asks the user to open the Market */72. private Runnable showUpdate = new Runnable()73. public void run()74. new AlertDialog.Builder(hello.this)75. .setIcon(R.drawable.ok)76. .setTitle(Update Available)77. .setMessage(An update for is available!nnOpen Android Market and see the details?)78. .setPositiveButton(Yes, new DialogInterface.OnClickListener() 79. public void onClick(DialogInterface dialog, int whichButton) 80. /* User clicked OK so do some stuff */81. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(market:/search?q=pname:your.app.id);82. startActivity(intent);83. 84. )85. .setNegativeButton(No, new DialogInterface.OnClickListener() 86. public void onClick(DialogInterface dialog, int whichButton) 87. /* User clicked Cancel */88. 89. )90. .show();91. 92. ;93. 94. 复制代码分为三个部分: 置于onCreate()方法中的程序用于判断当前时间是否需要检查更新(如果距离上次更新时间大于1天,将启动检查更新) 当以上条件满足时,启动checkUpdate来检查当前程序是否为最新版本。 如果确定版本已过期,那么将登录market,并直接指向当前程序页面。*向上言: 本人在论坛曾经发过一关于此问题的求助帖,虽然大至的思路和上文差不多,关键点是在于程序如何更新,现在看到它这里指出的更新方法居然是登录market。不过以后发布的程序都是在market中,问题就不存在。1. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(market:/search?q=pname:your.app.id);2. startActivity(intent);复制代码大家都是在eclipse上开发吧,在每次更新代码,运行模拟器时,大家是否有注意到console的提示信息:1. 2009-06-06 19:53:50 - Hello Android Launch!2. 2009-06-06 19:53:50 - Hello adb is running normally.3. 2009-06-06 19:53:50 - Hello Performing .hello.hello activity launch4. 2009-06-06 19:53:50 - Hello Automatic Target Mode: using existing emulator emulator-5554 running compatible AVD avd5. 2009-06-06 19:53:50 - Hello WARNING: Application does not specify an API level requirement!6. 2009-06-06 19:53:50 - Hello Device API version is 3 (Android 1.5)7. 2009-06-06 19:53:50 - Hello Uploading Hello.apk onto device emulator-55548. 2009-06-06 19:53:50 - Hello Installing Hello.apk.9. 2009-06-06 19:54:05 - Hello Application already exists. Attempting to re-install instead.10. 2009-06-06 19:54:31 - Hello Success!复制代码分析:1。android正常运行2。通过配置文件AndroidManifest.xml中运行我们的程序3。Uploading Hello.apk onto device emulator-5554这句是关键,更新我们的程序4。Installing Hello.apk.5。Application already exists. Attempting to re-install instead./程序已经存在,尝试重新安装所以如果我们的程序要自动更新,本人初步猜想是和上面的步骤是一样的。详看logcat中的log1. 06-06 11:54:02.567: DEBUG/PackageParser(582): Scanning package: /data/app/vmdl12464.tmp2. 06-06 11:54:08.048: INFO/PackageManager(582): Removing non-system package:.hello3. 06-06 11:54:08.187: DEBUG/PackageManager(582): Removing package .hello4. 06-06 11:54:08.286: DEBUG/PackageManager(582): Activities: .hello.hello5. 06-06 11:54:11.136: DEBUG/PackageManager(582): Scanning package .hello6. 06-06 11:54:11.301: INFO/PackageManager(582): /data/app/vmdl12464.tmp changed; unpacking7. 06-06 11:54:11.626: DEBUG/installd(555): DexInv: - BEGIN /data/app/vmdl12464.tmp -8. 06-06 11:54:12.987: DEBUG/dalvikvm(7756): DexOpt: load 224ms, verify 265ms, opt 1ms9. 06-06 11:54:13.047: DEBUG/installd(555): DexInv: - END /data/app/vmdl12464.tmp (success) -10. 06-06 11:54:13.057: DEBUG/PackageManager(582): Activities: .hello.hello11. 06-06 11:54:15.608: INFO/installd(555): move /data/dalvik-cache/dataappvmdl12464.tmpclasses.dex - /data/dalvik-cache/.hello.apkclasses.dex12. 06-06 11:54:15.737: DEBUG/PackageManager(582): New package installed in /data/app/.hello.apk复制代码关于此类的自动更新的第三方管理软件已经有了叫aTrackDog,其原理就是使用上面的方式。关于得到版本号,使用:1. int curVersion = getPackageManager().getPackageInfo(your.app.id, 0).versionCode;复制代码程序版本号的是放在AndroidManifest.xml文件中:1. 复制代码主点是关于:getPackageManager()在这个下面有很多方法,你可以通过它得,得到当前终端安装的程序等。关于安装包的函数是:getPackageManager().installPackage(packageURI)动手试验:在dos状态下运行:2009-6-6 20:39 上传下载附件 (24.51 KB) 查看logcat下的信息,大致和刚才相同,分析流程:1. 06-06 12:18:58.827: INFO/jdwp(8368): received file descriptor 20 from ADB2. 06-06 12:19:02.546: DEBUG/PackageParser(582): Scanning package: /data/app/vmdl12465.tmp3. 06-06 12:19:07.738: INFO/PackageManager(582): /data/app/vmdl12465.tmp changed; unpacking4. 06-06 12:19:07.978: DEBUG/installd(555): DexInv: - BEGIN /data/app/vmdl12465.tmp -5. 06-06 12:19:09.617: DEBUG/dalvikvm(8378): DexOpt: load 254ms, verify 564ms, opt 3ms6. 06-06 12:19:09.697: DEBUG/installd(555): DexInv: - END /data/app/vmdl12465.tmp (success) -7. 06-06 12:19:11.907: INFO/installd(555): move /data/dalvik-cache/dataappvmdl12465.tmpclasses.dex - /data/dalvik-cache/dataappcom.example.android.snake.apkclasses.dex8. 06-06 12:19:11.956: DEBUG/PackageManager(582): New package installed in /data/app/com.example.android.snake.apk9. 06-06 12:19:14.746: DEBUG/dalvikvm(8368): VM cleaning up10. 06-06 12:19:14.857: DEBUG/dalvikvm(8368): LinearAlloc 0x0 used 628420 of 4194304
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程保修的处理方案(3篇)
- 安全教育年度培训计划课件
- 安全教育平台培训考核课件
- 农业废弃物资源化利用在2025年的技术创新动态报告
- 安全教育培训骗人课件
- 安全教育培训途径课件
- 农业产业园项目农产品质量安全监管体系可行性研究与2025年效益评估报告
- 农业产业园项目农业科技成果转化与2025年经济效益评估报告
- 安全教育培训课件案例
- 2025年新能源社区智能微电网技术创新与应用案例深度解析报告
- 2025深入贯彻中央八项规定精神学习教育测试题和答案
- 医生进基层活动方案
- 2025-2030年中国蔬果保鲜剂行业市场深度调研及发展趋势与投资价值评估研究报告
- 2025年中国卡通公仔相机行业市场调查与发展研究报告
- 云南省土地征收农用地转用审批管理细则 (2023年修订)
- 2024年长庆油田分公司招聘考试真题
- 药剂知识竞赛试题及答案
- 尊师重教主题班会教案
- 医院质量与安全管理委员会制度职责及工作流程
- 幼儿园获奖公开课:中班数学《2和3的组成和分解》课件
- 数字化环境下航空装备研制质量管理的思考
评论
0/150
提交评论