温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Android应用中实现一个程序更新下载功能

发布时间:2020-12-01 17:00:37 来源:亿速云 阅读:139 作者:Leah 栏目:移动开发

这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个程序更新下载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创建一个新类,名为UpdateManager,代码如下:

import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import com.af.mobile.R; import android.app.AlertDialog; import android.app.Dialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; public class UpdateManager {private URL url=null;   /* 下载中 */   private static final int DOWNLOAD = 1;   /* 下载结束 */   private static final int DOWNLOAD_FINISH = 2;   /* 保存解析的XML信息 */   //HashMap<String, String> mHashMap;   /* 下载保存路径 */   private String mSavePath;   /* 记录进度条数量 */   private int progress;   /* 是否取消更新 */   private boolean cancelUpdate = false;   private Context mContext;   /* 更新进度条 */   private ProgressBar mProgress;   private Dialog mDownloadDialog;   private Handler mHandler = new Handler()   {     public void handleMessage(Message msg)     {       switch (msg.what)       {       // 正在下载       case DOWNLOAD:         // 设置进度条位置         mProgress.setProgress(progress);         break;       case DOWNLOAD_FINISH:         // 安装文件         installApk();         break;       default:         break;       }     };   };   public UpdateManager(Context context)   {     this.mContext = context;   }   public void checkUpdate()   {     if (isUpdate())     {       showNoticeDialog();     } else     {            }   }   /**    * 检查软件是否有更新版本    *     * @return    */   private boolean isUpdate()   {     // 获取当前软件版本     Double versionCode = getVersionCode(mContext);          Double serviceCode = 1.2;       // 版本判断       if (serviceCode > versionCode)       {         return true;       }          return false;   }   // 获取软件版本号      private Double getVersionCode(Context context)   {     Double versionCode = 0.0;     try     {       // 获取软件版本号,对应AndroidManifest.xml下android:versionCode       versionCode = (double) context.getPackageManager().getPackageInfo("com.af.mobile", 0).versionCode;     } catch (NameNotFoundException e)     {       e.printStackTrace();     }     return versionCode;   }       //显示软件更新对话框      private void showNoticeDialog()   {     AlertDialog.Builder builder = new Builder(mContext);     builder.setTitle("软件更新");     String string=download("http://192.168.0.102:9313/daojuserver/uploads/version.xml");//xml的下载地址     builder.setMessage(string);     builder.setPositiveButton("更新", new OnClickListener()     {       @Override       public void onClick(DialogInterface dialog, int which)       {         dialog.dismiss();         // 显示下载对话框         showDownloadDialog();       }     });     // 稍后更新     builder.setNegativeButton("稍后更新", new OnClickListener()     {       @Override       public void onClick(DialogInterface dialog, int which)       {         dialog.dismiss();       }     });     Dialog noticeDialog = builder.create();     noticeDialog.show();   }   // 显示软件下载对话框       private void showDownloadDialog()   {     // 构造软件下载对话框     AlertDialog.Builder builder = new Builder(mContext);     builder.setTitle("djfkjd");//提示信息内容     // 给下载对话框增加进度条     final LayoutInflater inflater = LayoutInflater.from(mContext);     View v = inflater.inflate(R.layout.softupdate_progress, null);     mProgress = (ProgressBar) v.findViewById(R.id.update_progress);     builder.setView(v);     // 取消更新     builder.setNegativeButton("取消更新", new OnClickListener()     {       @Override       public void onClick(DialogInterface dialog, int which)       {         dialog.dismiss();         // 设置取消状态         cancelUpdate = true;       }     });     mDownloadDialog = builder.create();     mDownloadDialog.show();     // 现在文件     downloadApk();   }   private void downloadApk()   {     // 启动新线程下载软件     new downloadApkThread().start();   }   private class downloadApkThread extends Thread   {     @Override     public void run()     {       try       {         // 判断SD卡是否存在,并且是否具有读写权限         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))         {           // 获得存储卡的路径           String sdpath = Environment.getExternalStorageDirectory() + "/";           mSavePath = sdpath + "download";           URL url = new URL("http://192.168.0.102:9313/daojuserver/uploads/SpMobile.apk");//apk下载地址地址           // 创建连接           HttpURLConnection conn = (HttpURLConnection) url.openConnection();           conn.connect();           // 获取文件大小           int length = conn.getContentLength();           // 创建输入流           InputStream is = conn.getInputStream();           File file = new File(mSavePath);           if (!file.exists())           {             file.mkdir();           }           File apkFile = new File(mSavePath, "dhfudh");           FileOutputStream fos = new FileOutputStream(apkFile);           int count = 0;           // 缓存           byte buf[] = new byte[1024];           // 写入到文件中           do           {             int numread = is.read(buf);             count += numread;             // 计算进度条位置             progress = (int) (((float) count / length) * 100);             // 更新进度             mHandler.sendEmptyMessage(DOWNLOAD);             if (numread <= 0)             {               mHandler.sendEmptyMessage(DOWNLOAD_FINISH);               break;             }             fos.write(buf, 0, numread);           } while (!cancelUpdate);           fos.close();           is.close();         }       } catch (MalformedURLException e)       {         e.printStackTrace();       } catch (IOException e)       {         e.printStackTrace();       }       // 取消下载对话框显示       mDownloadDialog.dismiss();     }   };      private void installApk()   {     File apkfile = new File(mSavePath, "dhfudh");     if (!apkfile.exists())     {       return;     }     // 通过Intent安装APK文件     Intent i = new Intent(Intent.ACTION_VIEW);     i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");     mContext.startActivity(i);   }   public String download(String urlString)   {     StringBuffer sbBuffer=new StringBuffer();     String line=null;     BufferedReader buffer=null;   try {     url=new URL(urlString);     HttpURLConnection urlConn=(HttpURLConnection) url.openConnection();     buffer=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));     while((line=buffer.readLine())!=null)     {       sbBuffer.append(line);     }   } catch (Exception e) {     // TODO: handle exception     e.printStackTrace();   }   finally   {     try {       buffer.close();     } catch (Exception e2) {       // TODO: handle exception       e2.printStackTrace();     }   }   return sbBuffer.toString();   } }

在Android应用程序Main界面

if(isOpenNetwork())//判断是否有网络     {       UpdateManager manager = new  UpdateManager(Main.this);     // 检查软件更新     manager.checkUpdate();            }

判断移动端是否有网络

private boolean isOpenNetwork() {     ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);     NetworkInfo networkInfo = connManager.getActiveNetworkInfo();     if (networkInfo != null) {       // 2.获取当前网络连接的类型信息       int networkType = networkInfo.getType();       if (ConnectivityManager.TYPE_WIFI == networkType) {         // 当前为wifi网络       } else if (ConnectivityManager.TYPE_MOBILE == networkType) {         // 当前为mobile网络       }       return connManager.getActiveNetworkInfo().isAvailable();     }     return false;   }

上述就是小编为大家分享的怎么在Android应用中实现一个程序更新下载功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI