「java自动更新升级安卓」Java更新
本篇文章给大家谈谈java自动更新升级安卓,以及Java更新对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java 安卓开发如何实现版本更新
1,在应用市场更新你的应用
2,自己找台服务,提供版本查询接口。当应用查询到有比自己更新的版本后,下载新的程序包安装
如何简单实现安卓app自动更新功能
第一步 服务器端:
服务端提供一个借口,或者网址,我这里就用的服务器是tomcat,这里提供一个网址如下:
//也就是一个json数据接口
public static final String UPDATE_URL = "";
我们来看下json数据参数:
{
//app名字
appname: "爱新闻1.1",
//服务器版本号
serverVersion: "2",
//服务器标志
serverFlag: "1",
//是否强制更新
lastForce: "1",
//apk下载地址,这里我已经下载了官方的apk,放到了服务器里面
updateurl: "",
//版本的更新的描述
upgradeinfo: "V1.1版本更新,你想不想要试一下哈!!!"
}
第二步 客户端需要实现:
首先我们要去解析服务端给的json,那么我们就要来创建一个model类了(代码过多,这里只有字段,getter和setter方法自己创建):
//app名字
private String appname;
//服务器版本
private String serverVersion;
//服务器标志
private String serverFlag;
//强制升级
private String lastForce;
//app最新版本地址
private String updateurl;
//升级信息
private String upgradeinfo;
在这里使用了一个辅助类,基本和model字段差不多:
public class UpdateInformation {
public static String appname = MyApplication.getInstance()
.getResources().getString(R.string.app_name);
public static int localVersion = 1;// 本地版本
public static String versionName = ""; // 本地版本名
public static int serverVersion = 1;// 服务器版本
public static int serverFlag = 0;// 服务器标志
public static int lastForce = 0;// 之前强制升级版本
public static String updateurl = "";// 升级包获取地址
public static String upgradeinfo = "";// 升级信息
public static String downloadDir = "wuyinlei";// 下载目录
}
在进入app的时候,这个时候如果检测到服务器端有了新的版本,就回弹出提示框,提示我们更新。这个我们在MainActivity里面处理逻辑(onCreate()方法里面):
OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() {
@Override
public void requestFailure(Request request, Exception e) {
}
@Override
public void requestSuccess(String result) {
try {
Log.d("wuyiunlei",result);
JSONObject object = new JSONObject(result);
UpdateInfoModel model = new UpdateInfoModel();
model.setAppname(object.getString("appname"));
model.setLastForce(object.getString("lastForce"));
model.setServerFlag(object.getString("serverFlag"));
model.setServerVersion(object.getString("serverVersion"));
model.setUpdateurl(object.getString("updateurl"));
model.setUpgradeinfo(object.getString("upgradeinfo"));
tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model);
} catch (JSONException e) {
e.printStackTrace();
}
//发送广播
sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION));
}
});
当然了,我们也要注册和结束广播:
/**
* 广播注册
*/
private void registerBroadcast() {
mUpdateReceiver = new UpdateReceiver(false);
mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION);
this.registerReceiver(mUpdateReceiver, mIntentFilter);
}
/**
* 广播卸载
*/
private void unRegisterBroadcast() {
try {
this.unregisterReceiver(mUpdateReceiver);
} catch (Exception e) {
e.printStackTrace();
}
}
接下来我们看下我们自定义的广播接收者UpdateReceiver .java:
public class UpdateReceiver extends BroadcastReceiver {
private AlertDialog.Builder mDialog;
public static final String UPDATE_ACTION = "wuyinlei_aixinwen";
private SharedPreferencesHelper mSharedPreferencesHelper;
private boolean isShowDialog;
public UpdateReceiver() {
}
public UpdateReceiver(boolean isShowDialog) {
super();
this.isShowDialog = isShowDialog;
}
@Override
public void onReceive(Context context, Intent intent) {
mSharedPreferencesHelper = mSharedPreferencesHelper
.getInstance(MyApplication.getInstance());
//当然了,这里也可以直接new处hashmap
HashMap tempMap = MyApplication.getInstance()
.getTempMap();
UpdateInfoModel model = (UpdateInfoModel) tempMap
//就是一个标志
.get(DeliverConsts.KEY_APP_UPDATE);
try {
/**
* 获取到当前的本地版本
*/
UpdateInformation.localVersion = MyApplication
.getInstance()
//包管理独享
.getPackageManager()
//包信息
.getPackageInfo(
MyApplication.getInstance()
.getPackageName(), 0).versionCode;
/**
* 获取到当前的版本名字
*/
UpdateInformation.versionName = MyApplication
.getInstance()
.getPackageManager()
.getPackageInfo(
MyApplication.getInstance()
.getPackageName(), 0).versionName;
} catch (Exception e) {
e.printStackTrace();
}
//app名字
UpdateInformation.appname = MyApplication.getInstance()
.getResources().getString(R.string.app_name);
//服务器版本
UpdateInformation.serverVersion = Integer.parseInt(model
.getServerVersion());
//服务器标志
UpdateInformation.serverFlag = Integer.parseInt(model.getServerFlag());
//强制升级
UpdateInformation.lastForce = Integer.parseInt(model.getLastForce());
//升级地址
UpdateInformation.updateurl = model.getUpdateurl();
//升级信息
UpdateInformation.upgradeinfo = model.getUpgradeinfo();
//检查版本
checkVersion(context);
}
/**
* 检查版本更新
*
* @param context
*/
public void checkVersion(Context context) {
if (UpdateInformation.localVersion UpdateInformation.serverVersion) {
// 需要进行更新
mSharedPreferencesHelper.putIntValue(
//有新版本
SharedPreferencesTag.IS_HAVE_NEW_VERSION, 1);
//更新
update(context);
} else {
mSharedPreferencesHelper.putIntValue(
SharedPreferencesTag.IS_HAVE_NEW_VERSION, 0);
if (isShowDialog) {
//没有最新版本,不用升级
noNewVersion(context);
}
clearUpateFile(context);
}
}
/**
* 进行升级
*
* @param context
*/
private void update(Context context) {
if (UpdateInformation.serverFlag == 1) {
// 官方推荐升级
if (UpdateInformation.localVersion UpdateInformation.lastForce) {
//强制升级
forceUpdate(context);
} else {
//正常升级
normalUpdate(context);
}
} else if (UpdateInformation.serverFlag == 2) {
// 官方强制升级
forceUpdate(context);
}
}
/**
* 没有新版本
* @param context
*/
private void noNewVersion(final Context context) {
mDialog = new AlertDialog.Builder(context);
mDialog.setTitle("版本更新");
mDialog.setMessage("当前为最新版本");
mDialog.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
/**
* 强制升级 ,如果不点击确定升级,直接退出应用
*
* @param context
*/
private void forceUpdate(final Context context) {
mDialog = new AlertDialog.Builder(context);
mDialog.setTitle("版本更新");
mDialog.setMessage(UpdateInformation.upgradeinfo);
mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent mIntent = new Intent(context, UpdateService.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("appname", UpdateInformation.appname);
mIntent.putExtra("appurl", UpdateInformation.updateurl);
//启动服务
context.startService(mIntent);
}
}).setNegativeButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 直接退出应用
//ManagerActivity.getInstance().finishActivity();
System.exit(0);
}
}).setCancelable(false).create().show();
}
/**
* 正常升级,用户可以选择是否取消升级
*
* @param context
*/
private void normalUpdate(final Context context) {
mDialog = new AlertDialog.Builder(context);
mDialog.setTitle("版本更新");
mDialog.setMessage(UpdateInformation.upgradeinfo);
mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent mIntent = new Intent(context, UpdateService.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//传递数据
mIntent.putExtra("appname", UpdateInformation.appname);
mIntent.putExtra("appurl", UpdateInformation.updateurl);
context.startService(mIntent);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
/**
* 清理升级文件
*
* @param context
*/
private void clearUpateFile(final Context context) {
File updateDir;
File updateFile;
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
updateDir = new File(Environment.getExternalStorageDirectory(),
UpdateInformation.downloadDir);
} else {
updateDir = context.getFilesDir();
}
updateFile = new File(updateDir.getPath(), context.getResources()
.getString(R.string.app_name) + ".apk");
if (updateFile.exists()) {
Log.d("update", "升级包存在,删除升级包");
updateFile.delete();
} else {
Log.d("update", "升级包不存在,不用删除升级包");
}
}
}
如何关闭java自动更新
进入控制面板中去把JAVA更新给关闭就可以了。点击【开始】--【控制面板】
在控制面板中把图标改成大图标这样好找一个点。再点击【JAVA】。
Java 控制面板中点击【更新】选项卡,再把【自动检更新】复选框勾制,此时会提示你选择停止自动更新点击【不检查】----【确定】这样就把JAVA自动更新功能给关闭了。
方法二
1
点击开始---【运行】或直接按快捷键【WIN+R】调出运行工具。再输入【msconfig】点击确定。
2
在系统配置窗口中点击【启动】选项卡,再把【Java(TM) Platform SE Auto Updater】前面的那个复选勾去掉,再点击【确定】,重启一下电脑这样就关闭了JAVA自动更新的功能。
java自动更新升级安卓的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java更新、java自动更新升级安卓的信息别忘了在本站进行查找喔。
发布于:2022-11-30,除非注明,否则均为
原创文章,转载请注明出处。