自定義版本更新彈窗
目錄介紹
1.本庫優點亮點
2.使用介紹
3.注意要點
4.效果展現
5.其餘介紹
好消息
博客筆記大彙總【16年3月到至今】,包括Java基礎及深刻知識點,Android技術博客,Python學習筆記等等,還包括平時開發中遇到的bug彙總,固然也在工做之餘收集了大量的面試題,長期更新維護而且修正,持續完善……開源的文件是markdown格式的!同時也開源了生活博客,從12年起,積累共計47篇[近20萬字],轉載請註明出處,謝謝!
連接地址:github.com/yangchong21…
若是以爲好,能夠star一下,謝謝!固然也歡迎提出建議,萬事起於忽微,量變引發質變!
1.本庫優點亮點
支持後臺下載,支持斷點下載。支持監聽下載過程,下載成功,失敗,異常,下載中,暫停等多種狀態
用戶能夠設置是否支持強制更新,還支持用戶設置版本更新內容,當內容過長,能夠實現滾動模式
支持進度條顯示,對話框進度條,而且下載中支持通知欄進度條展現,解決8.0通知欄不顯示問題
因爲下載apk到本地須要權限,固在lib中已經處理這個邏輯,只有當有讀寫權限時纔會下載文件,沒有權限則跳轉設置頁面打開權限
調用十分簡單,相比AppUpdate,CheckVersionLib等庫的特色是不用設置http的get或者post請求,只須要傳入下載連接就能夠
相比GitHub上幾個主流的版本更新庫,我這個lib代碼量少不少,我以爲最少最精簡的代碼完成須要的功能就最好
適配 Android 7.0 FileProvider,處理了7.0以上安裝apk異常問題,在lib中已經配置了fileProvider,直接使用就能夠
使用dialogFragment替換了dialog,處理了重建後邏輯,dialogFragment深刻分析博客
下載完成後自動安裝,對於錯誤的下載連接地址,會下載異常,也能夠查看異常的日誌
當下載完成後,再次彈窗,則會先判斷本地是否已經下載,若是下載則直接提示安裝
支持設置自定義下載文件路徑,若是不設置,則直接使用lib中的路徑【sd/apk/downApk目錄下】
當apk下載失敗,異常,錯誤等狀態,支持重啓下載任務。功能十分強大,已經用於正式app多時,你採用拿來主義使用便可,歡迎提出問題。
2.使用介紹
2.1 關於庫導入
在build.gradle中直接導入:compile 'cn.yc:YCUpdateLib:1.0.2'
2.2 使用說明
//設置自定義下載文件路徑
UpdateUtils.APP_UPDATE_DOWN_APK_PATH = "apk" + File.separator + "downApk" ;
String desc = getResources().getString(R.string.update_content_info);
/*
* @param isForceUpdate 是否強制更新
* @param desc 更新文案
* @param url 下載連接
* @param apkFileName apk下載文件路徑名稱
* @param packName 包名
*/
UpdateFragment.showFragment(MainActivity.this,
false ,firstUrl,apkName,desc,BuildConfig.APPLICATION_ID);
複製代碼
2.3 lib庫中解決了代碼中安裝 APK文件異常問題【注意lib已經解決該問題】
直接調用工具類UpdateUtils.installNormal方法
關於在代碼中安裝 APK 文件,在 Android N 之後,爲了安卓系統爲了安全考慮,不能直接訪問軟件,須要使用 fileProvider 機制來訪問、打開 APK 文件。裏面if 語句,就是區分軟件運行平臺,來對 intent 設置不一樣的屬性。
/**
* 關於在代碼中安裝 APK 文件,在 Android N 之後,爲了安卓系統爲了安全考慮,不能直接訪問軟件
* 須要使用 fileProvider 機制來訪問、打開 APK 文件。
* 普通安裝
* @param context 上下文
* @param apkPath path,文件路徑
* @param pathName 你的包名
*/
public static void installNormal(Context context, String apkPath , String pathName) {
if (apkPath==null || pathName==null){
return ;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
File apkFile = new File(apkPath);
// 因爲沒有在Activity環境下啓動Activity,設置下面的標籤
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//版本在7.0以上是不能直接經過uri訪問的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//參數1 上下文, 參數2 Provider主機地址 和配置文件中保持一致 參數3 共享的文件
Uri apkUri = FileProvider.getUriForFile(context, pathName+".fileProvider" , apkFile);
//添加這一句表示對目標應用臨時受權該Uri所表明的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive" );
} else {
Uri uri = Uri.fromFile(apkFile);
intent.setDataAndType(uri, "application/vnd.android.package-archive" );
}
context.startActivity(intent);
}
複製代碼
<provider
android:name=".VersionFileProvider"
android:authorities="${applicationId} .provider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
複製代碼
在res/xml下增長文件:file_paths.xml
<?xml version="1.0" encoding="utf-8" ?>
<paths>
<external-path
name="external_files"
path="." />
<root-path
name="root_path"
path="." />
</paths>
複製代碼
3.注意要點
注意須要申請讀寫權限,若是你要使用,能夠自定定義通知欄下載UI佈局,能夠本身設置彈窗UI。這裏就不適用正式項目中的UI和圖標,圖標是使用別人的,請勿商用。
4.效果展現
5.其餘介紹
關於其餘內容介紹
版本更新說明
v1.0.0 更新於2017年8月13日
v1.0.1 更新於2017年12月9日
v1.0.2 更新於2017年11月21日
關於博客彙總連接
關於LICENSE
Licensed under the Apache License, Version 2.0 (the "License" );
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
複製代碼