自定義版本更新彈窗
阿新 • • 發佈:2018-11-23
gem tails 路徑名 ××× install upd provide files androi 自定義版本更新彈窗
目錄介紹
- 1.本庫優勢亮點
- 2.使用介紹
- 3.註意要點
- 4.效果展示
- 5.其他介紹
好消息
該庫的GitHub地址:https://github.com/yangchong211/YCUpdateApp
- 博客筆記大匯總【16年3月到至今】,包括Java基礎及深入知識點,Android技術博客,Python學習筆記等等,還包括平時開發中遇到的bug匯總,當然也在工作之余收集了大量的面試題,長期更新維護並且修正,持續完善……開源的文件是markdown格式的!同時也開源了生活博客,從12年起,積累共計47篇[近20萬字],轉載請註明出處,謝謝!
- 鏈接地址:https://github.com/yangchong211/YCBlogs
- 如果覺得好,可以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日
關於博客匯總鏈接
- 1.技術博客匯總
- 2.開源項目匯總
- 3.生活博客匯總
- 4.喜馬拉雅音頻匯總
- 5.其他匯總
關於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://×××w.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.
自定義版本更新彈窗