android 集成百度自动更新 各种坑

前言:

百度提供各种免费api给开发者使用,对我们这个小菜鸟来说简直是救星,而且百度各种api的文档也比较全面。但是也有意外,前几天集成百度自动更新api,文档就过于简单,而且更新时间为2017年,集成过程遇到各种问题,简直不要太浪。好在经过努力还是完成了,在此分享给大家希望对你有用。

正文:

第一sdk提供的静默更新不太好用(7.0以上)

百度sdk集成工程就不说了非常简单,官方文档即可,此处直接给更新方法。

首先先说权限  下面是文件获取以及安装过程必须的权限。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REPLACE_EXISTING_PACKAGE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/><!-- 8.0必要权限  -->

第二

<provider
    android:authorities="com.example.administrator.hospitalproject.fileprovider"
    android:name="android.support.v4.content.FileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/bdp_update_filepaths"/>
</provider>

FileProvider的用就不多说了  5.0以后关于文件操作基本都要用到。注意bdp_update_filepaths的内容 第一个external-files-path是我们现在用到的

<resources>
    <external-files-path name="extfiles" path="autoupdatecache/" />
    <external-cache-path name="extcachs" path="autoupdatecache/" />
    <cache-path name="intcachs" path="autoupdatecache/" />

    <external-path path="" name="updateversion_apkfile" />
</resources>

然后就是更新方法了  我使用百度自定义UI的流程做静默更新(原始的不好用),其他没什么可说的,相信都能看懂,注意onDownloadComplete 下面的安装过程处理(android对高版本权限控制比较严格)。

BDAutoUpdateSDK. cpUpdateCheck(context, new CPCheckUpdateCallback() {//百度版本检查
   @Override
   public void onCheckUpdateCallback(AppUpdateInfo appUpdateInfo, AppUpdateInfoForInstall appUpdateInfoForInstall) {
      //appUpdateInfo.getAppVersionCode();//服务端新版本信息。
      if(APKVersionCodeUtils.getVersionCode(context)<appUpdateInfo.getAppVersionCode()){//百度版本小于商城版本
         if(flage==0) {
            Toast.makeText(context, "发现新版本,已开启自动更新", Toast.LENGTH_SHORT).show();
            apkDownload(appUpdateInfo);
         }
      }
   }
});
public void apkDownload(AppUpdateInfo appUpdateInfo){//下载
      flage=-1;
      BDAutoUpdateSDK.cpUpdateDownload(context, appUpdateInfo, new CPUpdateDownloadCallback() {
         @Override
         public void onStart() {

         }

         @Override
         public void onPercent(int i, long l, long l1) {//下载进度
//          list_tv.get(0).setText(i+"");
         }

         @Override
         public void onDownloadComplete(String s) {//下载完成后本地的 APK 包路径回调接口
            //安装
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
               Intent intent = new Intent(Intent.ACTION_VIEW);
               File file = new File(s);
//             Uri apkUri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".fileprovider", file);
               Uri apkUri = FileProvider.getUriForFile(getApplicationContext(), "com.example.administrator.hospitalproject.fileprovider", file);
               intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
               intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
               startActivity(intent);
            } else {// cpUpdateInstall(
               BDAutoUpdateSDK.cpUpdateInstall(getApplicationContext(), s);
            }
         }

         @Override
         public void onFail(Throwable throwable, String s) {
            Toast.makeText(context,s,Toast.LENGTH_SHORT).show();
         }

         @Override
         public void onStop() {

         }
      });
   }

猜你喜欢

转载自blog.csdn.net/qq_36355271/article/details/88015961