国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 軟件自動更新功能實現的方法

2020-02-21 17:32:23
字體:
來源:轉載
供稿:網友

自動更新的原則是我們事先與后臺協商的接口,我們訪問應用程序中Activity的接口,如果需要更新,后臺將返回一些數據,然后我們給出提示框提示,今天武林技術頻道小編特地搜羅整理了相關資訊,感興趣的網友們可別錯過哦!

首先看一下程序目錄結構

??

步驟:

1、新建一個類UpdateManger,用于顯示提示更新

?

public class UpdateManger {
?// 應用程序Context
?private Context mContext;
?// 提示消息
?private String updateMsg = "有最新的軟件包,請下載!";
?// 下載安裝包的網絡路徑
?private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk";
?private Dialog noticeDialog;// 提示有軟件更新的對話框
?private Dialog downloadDialog;// 下載對話框
?private static final String savePath = "/sdcard/updatedemo/";// 保存apk的文件夾
?private static final String saveFileName = savePath + "UpdateDemoRelease.apk";
?// 進度條與通知UI刷新的handler和msg常量
?private ProgressBar mProgress;
?private static final int DOWN_UPDATE = 1;
?private static final int DOWN_OVER = 2;

?

?

?private int progress;// 當前進度
?private Thread downLoadThread; // 下載線程
?private boolean interceptFlag = false;// 用戶取消下載
?// 通知處理刷新界面的handler
?private Handler mHandler = new Handler() {
??@SuppressLint("HandlerLeak")
??@Override
??public void handleMessage(Message msg) {
???switch (msg.what) {
???case DOWN_UPDATE:
????mProgress.setProgress(progress);
????break;
???case DOWN_OVER:
????installApk();
????break;
???}
???super.handleMessage(msg);
??}
?};
?public UpdateManger(Context context) {
??this.mContext = context;
?}
?// 顯示更新程序對話框,供主程序調用
?public void checkUpdateInfo() {
??showNoticeDialog();
?}
?private void showNoticeDialog() {
??android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(
????mContext);// Builder,可以通過此builder設置改變AleartDialog的默認的主題樣式及屬性相關信息
??builder.setTitle("軟件版本更新");
??builder.setMessage(updateMsg);
??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();
???}
??});
??noticeDialog = builder.create();
??noticeDialog.show();
?}
?protected void showDownloadDialog() {
??android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mContext);
??builder.setTitle("軟件版本更新");
??final LayoutInflater inflater = LayoutInflater.from(mContext);
??View v = inflater.inflate(R.layout.progress, null);

??mProgress = (ProgressBar) v.findViewById(R.id.progress);
??builder.setView(v);// 設置對話框的內容為一個View
??builder.setNegativeButton("取消", new OnClickListener() {
???@Override
???public void onClick(DialogInterface dialog, int which) {
????dialog.dismiss();
????interceptFlag = true;
???}
??});
??downloadDialog = builder.create();
??downloadDialog.show();
??downloadApk();
?}
?private void downloadApk() {
??downLoadThread = new Thread(mdownApkRunnable);
??downLoadThread.start();
?}
?protected void installApk() {
??File apkfile = new File(saveFileName);
??if (!apkfile.exists()) {
???return;
??}
??Intent i = new Intent(Intent.ACTION_VIEW);
??i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
????"application/vnd.android.package-archive");// File.toString()會返回路徑信息
??mContext.startActivity(i);
?}
?private Runnable mdownApkRunnable = new Runnable() {
??@Override
??public void run() {
???URL url;
???try {
????url = new URL(apkUrl);
????HttpURLConnection conn = (HttpURLConnection) url.openConnection();
????conn.connect();
????int length = conn.getContentLength();
????InputStream ins = conn.getInputStream();

????File file = new File(savePath);
????if (!file.exists()) {
?????file.mkdir();
????}
????String apkFile = saveFileName;
????File ApkFile = new File(apkFile);
????FileOutputStream outStream = new FileOutputStream(ApkFile);
????int count = 0;
????byte buf[] = new byte[1024];
????do {
?????int numread = ins.read(buf);
?????count += numread;
?????progress = (int) (((float) count / length) * 100);
?????// 下載進度
?????mHandler.sendEmptyMessage(DOWN_UPDATE);
?????if (numread <= 0) {
??????// 下載完成通知安裝
??????mHandler.sendEmptyMessage(DOWN_OVER);
??????break;
?????}
?????outStream.write(buf, 0, numread);
????} while (!interceptFlag);// 點擊取消停止下載
????outStream.close();
????ins.close();
???} catch (Exception e) {
????e.printStackTrace();
???}
??}
?};
}

?

?

2、新建一個xml文件,用于定義下載過程中的ProgressBar的進度顯示,名為progress.xml

?

?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

</LinearLayout>


3、在MainActivity中onCreate()方法中,進行軟件更新的檢測

?

mUpdateManger = new UpdateManger(MainActivity.this);// 注意此處不能傳入getApplicationContext();會報錯,因為只有是一個Activity才可以添加窗體
mUpdateManger.checkUpdateInfo();

并且在配置清單文件中添加網絡權限?<uses-permission android:name="android.permission.INTERNET" />

4、運行程序

--點擊下載-->

關于Android 軟件自動更新功能實現的方法,就介紹到這兒了,想獲得更多相關資訊的網友們,可以持續關注武林技術頻道哦!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 米林县| 通许县| 新和县| 涿鹿县| 佛教| 沧州市| 海南省| 岳普湖县| 雷州市| 大丰市| 泰和县| 安宁市| 彭山县| 茂名市| 界首市| 聂拉木县| 莱阳市| 晋江市| 宝山区| 惠东县| 凌云县| 庆安县| 阆中市| 浑源县| 台前县| 涪陵区| 丘北县| 工布江达县| 濮阳市| 瑞金市| 崇义县| 通江县| 天水市| 敦煌市| 伊金霍洛旗| 五大连池市| 平远县| 攀枝花市| 福安市| 曲阜市| 德格县|