自定義版本更新彈窗 原

自定義版本更新彈窗

目錄介紹

  • 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.效果展示

image image image image image image

5.其他介紹

關於其他內容介紹

image

版本更新說明

  • 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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章