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

首頁 > 系統 > Android > 正文

Android開發之自帶下載器DownloadManager的使用示例代碼

2019-12-12 03:28:42
字體:
來源:轉載
供稿:網友

Android 開發中,經常有從服務器下載數據的需求出現,尤其是在線更新App的情形。其基本思路是根據本地的App版本號和服務器的版本號進行比較,如果服務器版本較新,再進行提示然后下載Apk最后進行安裝。這種需求解決方案有很多,第三方的網絡框架基本都有這個功能。

Android自帶的DownloadManager是一個很好的下載文件的工具。該類在API level 9之后出現,它已經幫我們處理了下載失敗、重新下載等功能,整個下載過程全部交給系統負責,不需要我們過多的處理,非常的nice。關鍵的是用起來也很簡單,很爽,稍微封裝一下就可以幾句話搞定下載。

下面以一個簡單案例來實現從服務器下載一個Apk文件并進行安裝。

1、打開本地Tomcat服務器,放入一個Apk文件

2、開啟Tomcat,然后確保能從瀏覽器下載

 

3、編寫DownloadManager工具類,代碼注釋很詳細

public class DownloadUtils {  //下載器  private DownloadManager downloadManager;  //上下文  private Context mContext;  //下載的ID  private long downloadId;  public DownloadUtils(Context context){    this.mContext = context;  }  //下載apk  public void downloadAPK(String url, String name) {    //創建下載任務    Request request = new Request(Uri.parse(url));    //移動網絡情況下是否允許漫游    request.setAllowedOverRoaming(false);    //在通知欄中顯示,默認就是顯示的    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);    request.setTitle("新版本Apk");    request.setDescription("Apk Downloading");    request.setVisibleInDownloadsUi(true);    //設置下載的路徑    request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath() , name);    //獲取DownloadManager    downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);    //將下載請求加入下載隊列,加入下載隊列后會給該任務返回一個long型的id,通過該id可以取消任務,重啟任務、獲取下載的文件等等    downloadId = downloadManager.enqueue(request);    //注冊廣播接收者,監聽下載狀態    mContext.registerReceiver(receiver,        new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));  }  //廣播監聽下載的各個狀態  private BroadcastReceiver receiver = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {      checkStatus();    }  };  //檢查下載狀態  private void checkStatus() {    Query query = new Query();    //通過下載的id查找    query.setFilterById(downloadId);    Cursor c = downloadManager.query(query);    if (c.moveToFirst()) {      int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));      switch (status) {         //下載暫停        case DownloadManager.STATUS_PAUSED:          break;        //下載延遲        case DownloadManager.STATUS_PENDING:          break;        //正在下載        case DownloadManager.STATUS_RUNNING:          break;        //下載完成        case DownloadManager.STATUS_SUCCESSFUL:          //下載完成安裝APK          installAPK();          break;        //下載失敗        case DownloadManager.STATUS_FAILED:          Toast.makeText(mContext, "下載失敗", Toast.LENGTH_SHORT).show();          break;      }    }  }  //下載到本地后執行安裝  private void installAPK() {    //獲取下載文件的Uri    Uri downloadFileUri = downloadManager.getUriForDownloadedFile(downloadId);    if (downloadFileUri != null) {      Intent intent= new Intent(Intent.ACTION_VIEW);      intent.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      mContext.startActivity(intent);    }  }}

4、編寫Activity代碼初始化工具類,然后下載

public class MainActivity extends AppCompatActivity {  private DownloadUtils downloadUtils;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    downloadUtils =  new DownloadUtils(MainActivity.this);     downloadUtils.downloadAPK("http://192.168.1.104:8080/XXX.apk", "XXX.apk");  }}

5、配置權限

<!--在SDCard中創建與刪除文件權限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!-- 往SDCard寫入數據權限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 從SDCard讀取數據權限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!-- 訪問網絡權限 --><uses-permission android:name="android.permission.INTERNET"/>

6、運行結果

運行以后會去下載服務器的Apk,通知欄也會有相應的通知。當下載完畢以后,會彈出安裝界面。

通知欄

主界面


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富川| 合作市| 澄迈县| 云龙县| 高邮市| 亚东县| 龙岩市| 灵石县| 清新县| 玉屏| 双城市| 五华县| 宜兰市| 溆浦县| 德保县| 新宾| 灵山县| 弋阳县| 昆山市| 抚松县| 县级市| 菏泽市| 保定市| 新化县| 兴安县| 教育| 万载县| 康保县| 涟源市| 漳浦县| 合川市| SHOW| 德钦县| 寻甸| 麻江县| 武宁县| 台州市| 崇信县| 铜陵市| 浦县| 安阳县|