日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异步任务下载apk文件并弹出对话框提示当前进度,文件下载结束后弹出安装界面

發(fā)布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步任务下载apk文件并弹出对话框提示当前进度,文件下载结束后弹出安装界面 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主要任務

1.下載apk保存到sd卡指定目錄
2.下載時顯示下載的進度
3.下載完成后彈出對話框提示安裝

分析過程:

  • 聯(lián)網(wǎng)操作不能在UI線程(主線程)進行 需要開啟線程下載,為了效率我們這里采用異步線程(AsyncTask)。
  • 異步下載的同時需要在主界面更新UI,所以利用接口回調(diào)設置一個DialogProgress的進度條展示。
  • 下載完成提示安裝。


  • 下面是完整代碼:

    先創(chuàng)建異步任務執(zhí)行下載操作


    package com.android.download;import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.os.AsyncTask; import android.os.Environment;/*** 下載apk任務* 泛型一:String:表示下載的URL* 泛型二:Integer:每次讀取進度條的返回值,用于界面更新* 泛型三:String:表示返回值類型,返回被下載的apk文件 的路徑,為啟動apk安裝做準備* */ public class MyTask extends AsyncTask<String, Integer, String> {public interface CallBack {public void start(); //任務開始這里面應該彈出進度條對話框public void updataProgress(int progress);//獲取到更新的進度值為進度條對話框設置值/*** 下載完成,* * 1.對話框消失* * 2.啟動安裝apk界面,需要apk路徑*/public void finish(String apkPath);}CallBack cb;public MyTask(CallBack cb) {super();this.cb = cb;}@Overrideprotected void onPreExecute() {super.onPreExecute();if (cb != null) {cb.start();}}@Overrideprotected String doInBackground(String... params) {// 1.HttpURLConnectionHttpURLConnection conn = null;String apkPath = null;// 2.URLtry {URL url = new URL(params[0]);// 3.url.openConnectionconn = (HttpURLConnection) url.openConnection();// 4.InputStreamInputStream in = conn.getInputStream();// 獲取該文件的總長度int total = conn.getContentLength();// 5.獲取保存文件的路徑及文件 名/sdcard/abcdefg/tmp.apkString path_sdcard = Environment.getExternalStorageDirectory().getAbsolutePath() + "/abcdefg";File fileParent = new File(path_sdcard);// 判斷該目錄是否存在,如果不存在,創(chuàng)建該目錄if (!fileParent.exists()) {// 創(chuàng)建目錄fileParent.mkdirs();}// 6.創(chuàng)建File對象,再拿到OutputStreamFile file = new File(path_sdcard, "tmp.apk");//用來返回該apk路徑apkPath = file.getAbsolutePath();OutputStream out = new FileOutputStream(file);// 7.創(chuàng)建byte[] bufferbyte[] buffer = new byte[4096];// 8.inputStream==>OutputStream// 循環(huán)讀寫時,應該要把每次讀入的長度進行累加,再把累加的值與總長度除一下,得到百分比用于更新進度條的值int sum = 0;int len = 0;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);// 累加sum = sum + len;// 計算百分比int per = (int) (sum * 100f / total);// 發(fā)布進度值publishProgress(per);}out.flush();// 收尾out.close();in.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (conn != null) {conn.disconnect();}}// 返回當前被保存的apk的絕對路徑return apkPath;}@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);if (cb != null) {cb.updataProgress(values[0]);}}/** result表示的是apk的路徑*/@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);if (cb != null) {cb.finish(result);}}}
    package com.android.download;import java.io.File;import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View;import com.android.download.MyTask.CallBack;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}ProgressDialog pd;// 點擊下載apkpublic void downlaod(View view) {// 1.啟動下載任務MyTask task = new MyTask(new CallBack() {@Overridepublic void updataProgress(int progress) {pd.setProgress(progress);}@Overridepublic void start() {pd = new ProgressDialog(MainActivity.this);pd.setTitle("下載提示");pd.setMessage("正在下載apk...");pd.setCancelable(false); //設置下載過程對話框不能消失pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.show();}@Overridepublic void finish(String apkPath) {// 消失對話框pd.dismiss();// 啟動安裝installApk(apkPath);}});task.execute("apkPath");//需要下載的apk鏈接}/*** 安裝apk* * @param url*/private void installApk(String apkFilePath) {File apkfile = new File(apkFilePath);if (!apkfile.exists()) {return;}Intent i = new Intent(Intent.ACTION_VIEW);i.setDataAndType(Uri.parse("file://" + apkfile.toString()),"application/vnd.android.package-archive");startActivity(i);} }

    xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.day012_downloadapk.MainActivity" ><Buttonandroid:onClick="downlaod"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="下載apk" /></RelativeLayout>

    不要忘了添加聯(lián)網(wǎng)權(quán)限和讀寫sd卡權(quán)限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>

    界面效果圖:

    最后讀者可以自己加個判斷文件是否已經(jīng)存在 如果已經(jīng)存在啟動安裝即可


    總結(jié)

    以上是生活随笔為你收集整理的异步任务下载apk文件并弹出对话框提示当前进度,文件下载结束后弹出安装界面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 深夜福利院| 鲁鲁久久| 综合视频一区二区 | 国产乱人乱偷精品视频 | 国产精品一线天粉嫩av | 一级的大片 | 亚洲高清久久久 | 国产成人精品无码免费看夜聊软件 | 神马久久精品 | 成年人免费观看视频网站 | www.久久网 | 欧美午夜精品久久久久久孕妇 | 国产丝袜精品视频 | 天天射天天色天天干 | 精品成人 | 日韩av区 | 姐姐的秘密韩剧免费观看全集中文 | 国产精品久久无码 | 日日躁夜夜躁狠狠久久av | 懂色av中文一区二区三区天美 | 丰满人妻一区二区三区性色 | 黄色影音 | 国产影视一区二区三区 | 黄色www视频 | 久久国| 中文在线日韩 | 日韩欧美小视频 | 久久久久久久久久久久久久国产 | 日操干 | 美女黄色在线观看 | a毛片大片 | 国产精品视频导航 | 久久精品亚洲天堂 | 神马午夜51 | 午夜激情网 | 日日干日日射 | 超薄肉色丝袜一二三 | 狠狠干一区二区 | 午夜吃瓜 | 亚洲熟妇一区二区三区 | 人妖ts福利视频一二三区 | 贝利弗山的秘密1985版免费观看 | 在线免费视频你懂的 | 激情总合网 | 亚洲精品一区二 | 国产视频a| 丁香婷婷九月 | 6080一级片| 阿娇全套94张未删图久久 | 国产精品 欧美精品 | 成av人片一区二区三区久久 | 日韩三级黄 | 久久久久亚洲av无码网站 | 少妇无内裤下蹲露大唇视频 | 69精品一区二区三区 | 亚洲综合色站 | 成年人视频免费看 | 成人片免费视频 | 亚洲v欧美v另类v综合v日韩v | 三级黄色免费 | 涩涩国产 | 一区二区视频观看 | 日韩一区二区三区不卡 | 在线播放视频高清在线观看 | 久久精品视频网 | 久久人妻少妇嫩草av蜜桃 | たちの熟人妻av一区二区 | 精品国产三级a∨在线 | 国产精品69久久久久 | 国产青青视频 | 亚洲高潮无码久久 | 自拍偷拍第2页 | 国产精品成人国产乱一区 | 快色av| 日韩精品成人免费观看视频 | 日韩av无码一区二区三区不卡 | 日韩激情视频一区二区 | 亚洲国产精品国自产拍av | 久久久久久亚洲av无码专区 | 四虎影库| 激情四射网 | 青青草免费在线观看视频 | 国产av一区二区三区最新精品 | 日本美女逼 | 日本人妻不卡一区二区三区中文字幕 | 亚洲一区影院 | 欧美日韩国产成人 | 特黄特色特刺激免费播放 | 丰满的人妻hd高清日本 | 超碰com| 国产爆乳无码一区二区麻豆 | 春色伊人 | 直接看毛片 | 国产av无码国产av毛片 | 欧美三级在线 | 日韩av在线直播 | 一起草av在线| 巨大胸大乳奶电影 | 日本综合视频 |