前言:
百度提供各种免费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() {
}
});
}