手机APP的内容是怎么我的世界版本更新内容的

Android实现APP自动更新功能
现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该小程序实现的就是这个功能。
该小程序的特点是,当有更新时,会弹出一个提示框,点击确定,则在通知来创建一个进度条进行下载,点击取消,则取消更新。
以下是详细代码:
1.创建布局文件notification_item.xml,用于在通知栏生成一个进度条和下载图标。
2.创建AppContext类,该类继承自Application。
package com.test.
import android.app.A
import android.content.C
import com.test.update.config.C
public class AppContext extends Application {
private static AppContext appI
public static AppContext getInstance() {
return appI
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
appInstance =
context = this.getBaseContext();
// 获取当前版本号
PackageInfo packageInfo = getApplicationContext()
.getPackageManager().getPackageInfo(getPackageName(), 0);
Config.localVersion = packageInfo.versionC
Config.serverVersion = 1;// 假定服务器版本为2,本地版本默认是1
} catch (NameNotFoundException e) {
e.printStackTrace();
initGlobal();
public void initGlobal() {
Config.localVersion = getPackageManager().getPackageInfo(
getPackageName(), 0).versionC // 设置本地版本号
Config.serverVersion = 2;// 假定服务器版本为2,本地版本默认是1--实际开发中是从服务器获取最新版本号,android具体与后端的交互见我另///外的博文
} catch (Exception ex) {
ex.printStackTrace();
3.创建配置文件类Config.java,在这个类里面定义一些与版本相关的常量
package com.test.update.
public class Config {
//版本信息
public static int localVersion = 0;
public static int serverVersion = 0;
/* 下载包安装路径 */
public static final String savePath = /sdcard/test/;
public static final String saveFileName = savePath + test.
4.编写更新服务类UpdateSerie.java
package com.test.
import java.io.F
import java.io.FileOutputS
import java.io.InputS
import java.net.HttpURLC
import java.net.URL;
import android.annotation.SuppressL
import android.app.N
import android.app.NotificationM
import android.app.PendingI
import android.app.S
import android.content.I
import android.net.U
import android.os.E
import android.os.H
import android.os.IB
import android.os.M
import android.widget.RemoteV
import com.test.update.config.C
public class UpdateService extends Service {
private int titleId = 0;
// 文件存储
private File updateDir =
private File updateFile =
// 下载状态
private final static int DOWNLOAD_COMPLETE = 0;
private final static int DOWNLOAD_FAIL = 1;
private NotificationManager updateNotificationManager =
private Notification updateNotification =
// 通知栏跳转Intent
private Intent updateIntent =
private PendingIntent updatePendingIntent =
* 创建通知栏
RemoteViews contentV
// 这样的下载代码很多,我就不做过多的说明
int downloadCount = 0;
int currentSize = 0;
long totalSize = 0;
int updateTotalSize = 0;
// 在onStartCommand()方法中准备相关的下载工作:
@SuppressWarnings(deprecation)
public int onStartCommand(Intent intent, int flags, int startId) {
// 获取传值
titleId = intent.getIntExtra(titleId, 0);
// 创建文件
if (android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment
.getExternalStorageState())) {
updateDir = new File(Environment.getExternalStorageDirectory(),
Config.saveFileName);
updateFile = new File(updateDir.getPath(), getResources()
.getString(titleId) + .apk);
this.updateNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
this.updateNotification = new Notification();
// 设置下载过程中,点击通知栏,回到主界面
updateIntent = new Intent(this, UpdateActivity.class);
updatePendingIntent = PendingIntent.getActivity(this, 0, updateIntent,
// 设置通知栏显示内容
updateNotification.icon = R.drawable.ic_
updateNotification.tickerText = 开始下载;
updateNotification.setLatestEventInfo(this, QQ, 0%,
updatePendingIntent);
// 发出通知
updateNotificationManager.notify(0, updateNotification);
// 开启一个新的线程下载,如果使用Service同步下载,会导致ANR问题,Service本身也会阻塞
new Thread(new updateRunnable()).start();// 这个是下载的重点,是下载的过程
return super.onStartCommand(intent, flags, startId);
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
@SuppressLint(HandlerLeak)
private Handler updateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWNLOAD_COMPLETE:
// 点击安装PendingIntent
Uri uri = Uri.fromFile(updateFile);
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(uri,
application/vnd.android.package-archive);
updatePendingIntent = PendingIntent.getActivity(
UpdateService.this, 0, installIntent, 0);
updateNotification.defaults = Notification.DEFAULT_SOUND;// 铃声提醒
updateNotification.setLatestEventInfo(UpdateService.this,
QQ, 下载完成,点击安装。, updatePendingIntent);
updateNotificationManager.notify(0, updateNotification);
// 停止服务
stopService(updateIntent);
case DOWNLOAD_FAIL:
// 下载失败
updateNotification.setLatestEventInfo(UpdateService.this,
QQ, 下载完成,点击安装。, updatePendingIntent);
updateNotificationManager.notify(0, updateNotification);
stopService(updateIntent);
public long downloadUpdateFile(String downloadUrl, File saveFile)
throws Exception {
HttpURLConnection httpConnection =
InputStream is =
FileOutputStream fos =
URL url = new URL(downloadUrl);
httpConnection = (HttpURLConnection) url.openConnection();
httpConnection
.setRequestProperty(User-Agent, PacificHttpClient);
if (currentSize & 0) {
httpConnection.setRequestProperty(RANGE, bytes=
+ currentSize + -);
httpConnection.setConnectTimeout(10000);
httpConnection.setReadTimeout(20000);
updateTotalSize = httpConnection.getContentLength();
if (httpConnection.getResponseCode() == 404) {
throw new Exception(fail!);
is = httpConnection.getInputStream();
fos = new FileOutputStream(saveFile, false);
byte buffer[] = new byte[4096];
int readsize = 0;
while ((readsize = is.read(buffer)) & 0) {
fos.write(buffer, 0, readsize);
totalSize +=
// 为了防止频繁的通知导致应用吃紧,百分比增加10才通知一次
if ((downloadCount == 0)
|| (int) (totalSize * 100 / updateTotalSize) - 10 & downloadCount) {
downloadCount += 10;
updateNotification.setLatestEventInfo(UpdateService.this,
正在下载, (int) totalSize * 100 / updateTotalSize
+ %, updatePendingIntent);
* 在这里我们用自定的view来显示Notification
updateNotification.contentView = new RemoteViews(
getPackageName(), R.layout.notification_item);
updateNotification.contentView.setTextViewText(
R.id.notificationTitle, 正在下载);
updateNotification.contentView.setProgressBar(
R.id.notificationProgress, 100, downloadCount, false);
updateNotificationManager.notify(0, updateNotification);
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
if (is != null) {
is.close();
if (fos != null) {
fos.close();
return totalS
class updateRunnable implements Runnable {
Message message = updateHandler.obtainMessage();
public void run() {
message.what = DOWNLOAD_COMPLETE;
// 增加权限;
if (!updateDir.exists()) {
updateDir.mkdirs();
if (!updateFile.exists()) {
updateFile.createNewFile();
// 下载函数,以QQ为例子
// 增加权限;
long downloadSize = downloadUpdateFile(
https://softfile.:8080/msoft/179//MobileQQ1.0()_Build0198.apk,
updateFile);
if (downloadSize & 0) {
// 下载成功
updateHandler.sendMessage(message);
} catch (Exception ex) {
ex.printStackTrace();
message.what = DOWNLOAD_FAIL;
// 下载失败
updateHandler.sendMessage(message);
5.编写活动类UpdateActivity
package com.test.
import com.test.update.config.C
import android.support.v4.app.F
import android.app.A
import android.app.AlertD
import android.content.DialogI
import android.content.I
import android.os.B
import android.util.L
import android.view.LayoutI
public class UpdateActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkVersion();
* 检查更新版本
public void checkVersion() {
if (Config.localVersion & Config.serverVersion) {
Log.i(hgncxzy, ==============================);
// 发现新版本,提示用户更新
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(软件升级)
.setMessage(发现新版本,建议立即更新使用.)
.setPositiveButton(更新,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// 开启更新服务UpdateService
// 这里为了把update更好模块化,可以传一些updateService依赖的值
// 如布局ID,资源ID,动态获取的标题,这里以app_name为例
Intent updateIntent = new Intent(
UpdateActivity.this,
UpdateService.class);
updateIntent.putExtra(titleId,
R.string.app_name);
startService(updateIntent);
.setNegativeButton(取消,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
alert.create().show();
// 清理工作,略去
// cheanUpdateFile()
6.添加权限以及将服务静态加载(在配置文件中加载)。浅谈手机app测试注意点 - 栋婷的春天的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
浅谈手机app测试注意点
& 17:50:46
/ 个人分类:
昨天刚写了一遍我的之路,现在我把我在半年app测试过程中遇到的问题和之前把到前辈的一篇,做个总结:我司产品“彩礼多”,已经在iOS、android等多个平台的客户端,这两个端也已经相继开发了几个版本,最近开发的2.8版本即将上线,了这么久也该总结一下了。  现在我们测试时,开发会先在本地机上打好测试包,自己安装,轮完一轮,开发修改好后,再打一个包。以下是时需要注意的点:  1、登录  ●登录用户名和密码错误时,界面有提示信息  ●用户主动退出登录后,下次启动APP时,应该进入登录界面  ●对于支持自动登录的APP,数据交换时&&,是否能自动登录成功且操作无误  ●密码更改后,登录时是否做到了有效数据的校验  ●对于未登录时一些页面的操作,是否做了控制  ●切换账号登录,检验登录的信息是否做到及时更新  ●对于多个端都进行操作时,确保数据库操作无误,且每个端可以及时看到数据的更新  ●对于一些软件,支持一个账号只允许登录一台机器,这时,需要检查账号登录多个时,是否将原用户剔除,且能够给出提示信息  ● APP切换到后台时,再次切换到前台的测试,如登录时,有电话打进来  2、离线  离线是应用程序在本地的客户端会缓存一部分数据以功程序下次调用  ●对于一些程序,需要在登录进来后,这时没有网络的情况下可以浏览本地数据  ●对于无网络时,刷新获取新数据时,不能获取数据且能给出友好提示  ●切换到后台,再次切换到前台时,可以正常查看  ●离线后又连上网,这时对数据有更新时,需要从服务器端获取新数据来更新客户端数据,且要更新本地缓存信息  ●对于一些界面的数据不提供离线查看,需要给出相应提示且界面更新后无任何数据  3、Sqlite数据库  android和IOS客户端都采用了sqlite数据库,当APP需要在客户端保存数据时,它们会创建相应的数据库表,最常见的就是对账号的保存,这时的测试点主要有:  ●跟一般数据库一样,需要见擦数据的增,删,改,查  ●客户端即用即建,当表不存在时,是否会自动创建  ●数据表被删除后,新建的表中的数据能否自动从服务器端中获取回来兵保存  ●当对数据进行了修改,删除,客户端和服务器端能否有相应的更新  ●获取数据,客户端是从直接从客户端获取还是和服务器端的数据进行比较  ●对于客户端从服务器端更新的数据,客户端是否有保存于本地。个人提的bug注意点:&& ●因为ios系统有不断的更新,所以会出现这样那样兼容性的问题,其实我们软件中有一点,我记得很清楚,就是在送人彩票环节,赠送成功后会弹出一个温馨提示(问用户是,否要提醒用户领取),用户一旦点了【好的】,会跳到一个短信提醒框,此时就会出错,在5上都没事,一旦在4s上运行就有可能付出闪退。& ●如果是同一个用户,那么她在android,ios上登录后,记录应该都是一样的。& ●一款手机软件在android系统上测试要特别注意,android手机款式多,内存,分辨率不一,所以测试难过也比较大。我们的软件有一个问题一直走不去,就是在小手机上,如果应用开多,占内存大了,就会出现闪退。&&●有新的版本要上线前,一定要测旧的版本,不能因为新版本上线了,老版本就不能用了,用老版本的用户还是大有人在。有一次,我用新版本注册的用户去玩老版本,结果就有有错过,当然这样玩的人很少。&&●如果一页面里有很多条记录里,要注意上下多滑动,我在测试过程中,好几次在上下滑动中又由于数据出现错误,导致闪退,尤其是android.&&●到了某个页面,突然断网了,然后你在不知情的情况下,点击某个按钮想继续往下走,此时,不能出现闪退的情况,而要给出断网提示。&&●文本框校验时采用等价类划分法,边界值法,错误推测法与场景法,至少这些方法的概念,自己网上去搜。& ●很多手机app在打开后,一般用户都不需要先注册登录,到了合适的地方,弹出合适的提示,很好友的让用户去登录。当然有些页面,而且有时没有判断,未登录去点一些按钮,有可能会闪退。未登录与登录显示的页面是完全不一样的,要仔细测。& ●用户登录状态太久,sessionId会过期,会出现“虽然是登录状态,系统会提示用户没有登录。”& ●外部软件需要更新导致自家软件闪退。我公司是一款博彩类软件,用户需要通过支付宝或财付通支付,有一次在用支付快捷支付时,提示我支付快捷支付需要更新,我就点了更新,更新完成后,我们的软件就异常退出了。& ●输入数据,点某颗按钮,会出现错误提示,有时不管这个提示,继续猛点这个按钮,会出现出人意外的结果哦。& ●上线前一定要测一下软件更新,我好几次这里没测,结果挨了批。这真是叫做“晚节不保”。所有功能都测了n遍了,大胆放心的上了,可是没有在测试环境测软件的更新。结果上线后,用户更新了就出大问题了,大大影响用户量。唉,都是累阿。全国服务热线:
您的位置: >
手机APP频繁更新的原因及影响
作者:酷蜂科技
时间: 14:11
[摘要]广州app定制开发公司专家表示,在移动互联网市场不断扩大的今天,各式各样的APP都出现在人们的生活中,但是APP的频繁升级也给用户带来了烦恼。
& & &专家表示,在移动互联网市场不断扩大的今天,各式各样的APP都出现在人们的生活中,但是APP的频繁升级也给用户带来了烦恼。
& & &据相关人士统计,手机客户端的升级较频繁,远超过pc端的,APP的升级已经再平常不过了。但也有很多人认为,不少软件更新后功能都是大同小异,甚至感觉不出更新后的变化,也有些人会觉得还是上一个版本的体验好。APP为何要频繁更新呢?背后的原因是什么呢?
& & &1、更新APP会耗费大量流量,如果不是在WIFI条件下,很多人都会觉得是在骗自己的流量。很多市民反映频繁更新已成了&智能手机强迫症&,&只要看到手机应用商店出现的数字角标,提示有几款软件需要升级至新版本,就会忍不住点开。&同时有部分的网友认为,APP升级确实带来了很大的改善。但是有些应用在升级详情中只注明了&漏洞修复及性能增强&,究竟修复了什么内容,提升了何种性能,却没具体说明。有时升级后会出现闪退、卡顿现象。
& & &2、手机APP功能变动较大,比如推出新功能、对界面进行了某些调整都会引起APP的更新。开发人员表示,功能性升级和技术性升级都属更新的范围。功能性升级是指往APP中添加了新的功能、调整修改了UI(用户界面)等。以摄像类APP为例,常见的功能性升级如添加了某种滤镜、某款贴纸等。对于一个相对成熟的APP开发团队来说,技术性升级不会频繁出现,但功能性升级较频繁。
& & &每款APP从诞生到成熟一般都需要两到三个月的时间。在这段缓冲时间里,软件的更新升级可能较为频繁。如果用户觉得影响了正常使用,可以等软件相对成熟了再下载安装。
& & &广州app开发公司专家建议用户在官方的手机应用商城下载软件;在更新时能多关注一下更新的内容。
本文链接转载请注明来自广州酷蜂科技!
app开发公司酷蜂科技于5月13日进行了一场初夏烧烤和上演了奔跑吧兄弟中的撕名牌大战。通过这次的活动小伙伴们的感情不仅变得亲密了,也深知合作的甜头。
广州app公司酷蜂科技4月的生日会在一个周末终于拉开了帷幕。广州app公司酷蜂科技的生日会可真是心意和套路共存啊。
app开发公司设计一款好的产品之后,要让它长久存在于市场上,最好的保险就是产品流量。流量与用户的留存率有关,app开发公司必须要解剖流量,才能寻求更好的引流方法。
app开发公司正在需求更好的突破,希望用更好的产品和功能来满足用户不断变化的需求。很多时候完成了最重要的事情,就如推倒了第一块多米诺骨牌,接下来的问题就很好解决了。因
app开发公司做产品分析和竞品分析是一件很常见的事情,但是能做好一份真正的产品分析需要涉及的要求不少。做好产品分析要达到一些基本要求,比如说是要熟知逻辑思维和产品意义
app用户增长已经到瓶颈期,广州app开发运营要重新评估用户需求才能解决这个用户增长瓶颈。提升用户质量以及功能价值,夯实用户是广州app开发势在必行的事情。
广州app开发公司其实可以运用游戏思维来进行产品开发,因为游戏思维有趣且严谨,可以给用户带来惊喜体验,还能感受到系统的强大。用游戏思维开发产品要注重产品的趣味性和持续
广州app开发公司管理用户有系统的方法,管理产品需求亦然。用户是千变万化的,今天和明天的需求都有可能是不一样的,对于管理产品需求却是万变不离其中。
广州App开发获客红利在app市场竞争后期阶段,获客红利所剩无几,要抓住红利是一个难点。为用户提供有价值的产品和内容,抓住用户核心需求才能找到获客红利的方法。
广州app开发公司要想用户有不一样的体验,还需要懂得卡片式设计的精髓。广州app开发公司在进行卡片式设计时还需要遵循一卡一概念和视觉享受等设计原则。
找找兼职app开发让有空闲时间的用户可以多赚点零花钱。企业在开发找兼职app时还需通过线上任何和严肃审核来吸引用户。
母婴市场处在高速发展的今天,母婴电商APP开发努力在抢占移动电商市场份额。母婴电商APP的出现为用户提供了更为便捷的购物体验以及交流平台,备受宝爸爸妈的喜爱。
语音导航app开发可以让导航变得更加简单,想去哪里就去哪里。企业所开发的语音导航app应该具备离线导航、语音导航、轨迹记录和周边服务等功能。
体育APP开发让更多人通过APP认识到更多志同道合的小伙伴。体育APP开发有望成为中国健康消费的最大产业、能获得更大的发展空间可与穿戴设备相结合让其发展更好。
酷蜂科技婚礼行业手机应用开发实现通过手机应用开发对接整个婚礼服务人员以及服务项目,为用户提供管家式的服务,消除更多的中间环节,致力于为婚礼行业消费者节省婚礼费用
时下的换脸APP软件风靡全球,进入国内之前,已经在国外社交平台掀起一波波热潮。下面为您推荐最火爆的MSQRD、Snapchat、Face Swap Booth三款用于换脸的APP软件。
评论 就是嗯哼
评论 app报价
评论 现在的世界真的什么都有,连动物语言的翻译器都出现了
评论 余泥监控app看起来很不错,是新开发的不?
评论 有哪些旅游ap好用的,请推荐
评论 IT文库真的很有需要,程序员有福了,一台手机就能收藏那么多资料。
评论 棋牌游戏很多人玩,开发app选择适合的公司,合作也比较愉快,这些内容可以作为参考啦。
评论 原来智能家居app开发类型有这么多
评论 AR软件开发产品设计你们分析的不错
评论 做个小程序多少钱}

我要回帖

更多关于 我的世界1.12更新内容 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信