寫在前面
框架內部支援中/英文(其他語言只需要在對應的string.xml
中取相同的名字即可)
內部對話方塊背景圖片、按鈕支援自定義了
檢視版本中的Log只需要過濾AppUpdate
開頭的Tag
重點: 如果沒有設定downloadPath
則預設為getExternalCacheDir()
目錄,同時不會申請[儲存]許可權!
Github專案地址
目錄
編譯問題
- 因為適配了Android O的通知欄,所以依賴的v7包版本比較高
appcompat-v7:26.1.0
- 使用的gradle版本為
gradle-4.1-all
,所以建議使用Android Studio 3.0
及以上的版本開啟此專案
效果圖
功能介紹
- 支援斷點下載
- 支援後臺下載
- 支援自定義下載過程
- 支援 裝置 >= Android M 動態許可權的申請
- 支援通知欄進度條展示(或者自定義顯示進度)
- 支援Android N
- 支援Android O
- 支援中/英文雙語
- 支援自定內建對話方塊的樣式
- 使用HttpURLConnection下載,未整合其他第三方框架
更加詳細的文件參閱此處《AppUpdate API文件》
DownloadManager:配置文件
初始化使用
DownloadManager.getInstance(this)
屬性 | 描述 | 預設值 | 是否必須設定 |
---|---|---|---|
context | 上下文 | null | true |
apkUrl | apk的下載地址 | null | true |
apkName | apk下載好的名字 | null | true |
downloadPath | apk下載的位置 | getExternalCacheDir() | false |
showNewerToast | 是否提示使用者 "當前已是最新版本" | false | false |
smallIcon | 通知欄的圖示(資源id) | -1 | true |
configuration | 這個庫的額外配置 | null | false |
apkVersionCode | 更新apk的versionCode (如果設定了那麼庫中將會進行版本判斷 下面的屬性也就需要設定了) |
1 | false |
apkVersionName | 更新apk的versionName | null | false |
apkDescription | 更新描述 | null | false |
apkSize | 新版本的安裝包大小(單位M) | null | false |
authorities | 相容Android N uri授權 | 應用包名 | false |
UpdateConfiguration:配置文件
屬性 | 描述 | 預設值 |
---|---|---|
notifyId | 通知欄訊息id | 1011 |
notificationChannel | 適配Android O的渠道通知 | 詳情查閱原始碼 |
httpManager | 設定自己的下載過程 | null |
breakpointDownload | 是否需要支援斷點下載 | true |
enableLog | 是否需要日誌輸出 | true |
onDownloadListener | 下載過程的回撥 | null |
jumpInstallPage | 下載完成是否自動彈出安裝頁面 | true |
showNotification | 是否顯示通知欄進度(後臺下載提示) | true |
forcedUpgrade | 是否強制升級 | false |
onButtonClickListener | 按鈕點選事件回撥 | null |
dialogImage | 對話方塊背景圖片資源(圖片規範參考demo) | -1 |
dialogButtonColor | 對話方塊按鈕的顏色 | -1 |
dialogButtonTextColor | 對話方塊按鈕的文字顏色 | -1 |
所有版本:點選檢視
使用步驟
第一步: app/build.gradle
進行依賴
implementation 'com.azhon:appupdate:1.7.3'
複製程式碼
第二步:建立DownloadManager
,更多用法請檢視這裡示例程式碼
DownloadManager manager = DownloadManager.getInstance(this);
manager.setApkName("appupdate.apk")
.setApkUrl("https://raw.githubusercontent.com/azhon/AppUpdate/master/apk/appupdate.apk")
.setSmallIcon(R.mipmap.ic_launcher)
//可設定,可不設定
.setConfiguration(configuration)
.download();
複製程式碼
第三步:相容Android N 及以上版本,在你應用的Manifest.xml
新增如下程式碼
<--! android:authorities="${applicationId}"
這個值必須與DownloadManager中的authorities一致(不設定則為應用包名)-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_public" />
</provider>
複製程式碼
第四步:資原始檔res/xml/file_paths_public.xml
內容
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="app_update_external"
path="/" />
<external-cache-path
name="app_update_cache"
path="/" />
</paths>
複製程式碼
- 相容Android O及以上版本,需要設定
NotificationChannel(通知渠道)
;庫中已經寫好可以前往查閱NotificationUtil.java - 溫馨提示:升級對話方塊中的內容是可以上下滑動的哦?!
- 如果需要實現自己一套下載過程,只需要繼承
BaseHttpDownloadManager
並使用listener更新進度
public class MyDownload extends BaseHttpDownloadManager {}
複製程式碼
Demo下載體驗
版本更新記錄
- v1.7.3
- 當下載地址返回http code 200且content-length = -1時,使用全量下載
- 優化下載引數檢查將throw new exception改成return
更多更新記錄點此檢視
結語
- 歡迎大家加入《通往Android的神奇之旅》群號碼:555974449
- 如果大家在使用的過程中有什麼問題,歡迎提Issues告知。
- 如果大家有什麼好的建議或者需求,也可以提Issues或者傳送郵件至:958460248@qq.com