文章评分
次,平均分 :
[收起]
文章目录
类 BYupdate
简述:实现软件信息的展示和软件更新功能
- java.lang.Object
-
- cn.wangbaiyuan.tools.BYupdate
-
12public class <span class="typeNameLabel">BYupdate</span>extends java.lang.Object实现软件信息的展示和软件更新功能- 作者:
- 王柏元
-
-
字段概要
字段 限定符和类型 字段和说明 OnClickListener <span class="memberNameLink">download_listener</span>
-
构造器概要
构造器 构造器和说明 <span class="memberNameLink">BYupdate</span>(Context icontext, java.lang.String url, java.lang.String version)
-
方法概要
All Methods Instance Methods Concrete Methods 限定符和类型 方法和说明 void <span class="memberNameLink">checkupdate</span>() 检查更新void <span class="memberNameLink">setDownload_url</span>(java.lang.String url) 设置软件更新服务处理地址-
从类继承的方法 java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
字段详细资料
-
download_listener
1public OnClickListener download_listener
-
-
构造器详细资料
-
BYupdate
123public BYupdate(Context icontext,java.lang.String url,java.lang.String version)- 参数:
- icontext - context一般是引用此类的activity
- url - 软件更新服务处理地址
- version - 软件当前版本号
-
-
方法详细资料
-
setDownload_url
1public void setDownload_url(java.lang.String url)设置软件更新服务处理地址- 参数:
- url -
-
checkupdate
1public void checkupdate()检查更新
-
-
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
package cn.wangbaiyuan.tools; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONException; import org.json.JSONObject; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.net.Uri; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.Toast; /** * 实现软件信息的展示和软件更新功能 * @author 王柏元 * */ public class BYupdate { String sw_version; String current_version; String version_des; String url_path; Context context; String download_url; /** * * @param icontext context一般是引用此类的activity * @param url 软件更新服务处理地址 * @param version 软件当前版本号 */ public BYupdate(Context icontext,String url, String version){ context=icontext; url_path=url; current_version=version; } /** * 设置软件更新服务处理地址 * @param url */ public void setDownload_url(String url){ url_path=url; } Handler hander=new Handler(){ @Override public void handleMessage(Message msg){ if(msg.what==0x123){ //version_label.setText("最新版本:"+sw_version); Double latest_Version=Double.parseDouble(sw_version); if(Double.parseDouble(current_version)<latest_Version) { AlertDialog.Builder builder=new AlertDialog.Builder(context) .setTitle("当前版本:"+current_version+",最新版本:"+latest_Version) .setMessage(version_des); builder.setPositiveButton("下载更新", download_listener); builder.setNegativeButton("以后再说", null); builder.create(); builder.show(); } else Toast.makeText(context, "当前是最新版本", 5).show(); } else if(msg.what==012) Toast.makeText(context, "安装包下载完成,进入安装……", Toast.LENGTH_LONG).show(); else if(msg.what==01244) Toast.makeText(context, "下载错误……", Toast.LENGTH_LONG).show(); //最后toast出文件名,因为这个程序是单线程的,所以要下载完文件以后才会执行这一句,中间的时间类似于死机,不过多线程还没有学到 } }; /** * 检查更新 */ public void checkupdate(){ new Thread(checkupdate).start(); Toast.makeText(context, "正在检查更新……", 2).show(); } public OnClickListener download_listener =new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new Thread(download).start(); Toast.makeText(context, "开始下载……", Toast.LENGTH_LONG).show(); } }; /** * 下载线程 */ Runnable download = new Runnable(){ @Override public void run() { String sdcard=Environment.getExternalStorageDirectory()+"/"; String filepath=sdcard+"BYLeavePaper/"; download_url=(download_url.startsWith("http://"))?download_url:"http://"+download_url; try { URL url = new URL(download_url); //打开到url的连接 HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //以下为java IO部分,大体来说就是先检查文件夹是否存在,不存在则创建,然后的文件名重复问题,没有考虑 InputStream istream=connection.getInputStream(); String filename=download_url.substring(download_url.lastIndexOf("/")+1); File dir=new File(filepath); if (!dir.exists()) { dir.mkdir(); } File file=new File(filepath+filename); file.createNewFile(); OutputStream output=new FileOutputStream(file); byte[] buff = new byte[1024]; int hasRead = 0; // 将URL对应的资源下载到本地 while((hasRead = istream.read(buff)) > 0) { output.write(buff, 0 , hasRead); } output.flush(); output.close(); istream.close(); hander.sendEmptyMessage(012); Log.e("log_tag",file.toString()); openFile(file); } catch (Exception e) { Log.e("log_tag","下载错误:"+e.toString()); hander.sendEmptyMessage(01244); } } }; /** * 检查更新线程 */ Runnable checkupdate = new Runnable(){ @Override public void run() { String jsonString = BYHttpGet.getJsonContent(url_path); Log.e("bypaperup",jsonString); try { JSONObject Json=new JSONObject(jsonString); sw_version=Json.getString("sw_version"); version_des=Json.getString("sw_description"); download_url=Json.getString("sw_url"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e("log_tag",e.toString()); } hander.sendEmptyMessage(0x123); } }; /** * 打开指定APK * @param file APK路径 */ private void openFile(File file) { Log.e("OpenFile", file.getName()); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); context.startActivity(intent); } } |

关注我的微信,获取文章更新
如果你觉得这篇文章对你有用,可以点击下面的“赞助作者”打赏作者!
转载注明原文出处:王柏元的博客>>https://wangbaiyuan.cn/homemade-software-updates-downloads-installation-byupdate.html
暂无评论