对于百度强制使用自家自动更新sdk不作评论,这里只是记录其使用方式。
其sdk有四种更新方式:1.静默更新 2.默认ui更新 3.自定义ui更新 4.通过百度助手更新
为了达到应用更新模块的统一性,我选择了第三种,自定义ui更新。这个就看大家的选择了,四种方式都可以。
一:首先到官网下载自动更新sdk:http://app.baidu.com/docs?id=19,下载的时候除了自动更新sdk,还会强制下载数据统计和广告联盟两个模块。
二:下载完成后解压,里面有对应的说明文档。
三:BDIntegrationSDK_LibProject把这个库工程加入到ide,然后自家的项目加入这个库工程。我到这里时,很奇怪,写更新代码时总是找不到相关类库,必须把BDAutoUpdate_APPX_SDK_20150826.jar 和 need_lib.jar 这两个jar包导入了项目才解决,但是用SDK自带的Demo,则不需要导入这两个jar包。
配置AndroidManifest文件:
<!-- 百度appid和appkey 需要去百度申请 -->
<meta-data android:name="BDAPPID" android:value="******"/>
<meta-data android:name="BDAPPKEY" android:value="**************"/>
<!-- 自动更新SDK -->
<activity
android:name="com.baidu.autoupdatesdk.ConfirmDialoigActivity"
android:exported="false"
android:screenOrientation="sensor"
android:theme="@style/bdp_update_dialog_style_fullscreen" />
<receiver
android:name="com.baidu.autoupdatesdk.receiver.BDBroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.baidu.autoupdatesdk.ACTION_NEW_UPDATE" />
<action android:name="com.baidu.autoupdatesdk.ACTION_DOWNLOAD_COMPLETE" />
<action android:name="com.baidu.autoupdatesdk.ACTION_NEW_AS" />
<action android:name="com.baidu.autoupdatesdk.ACTION_AS_DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
所需的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
四:检查是否有更新
BDAutoUpdateSDK.cpUpdateCheck(this, new MyCPCheckUpdateCallback());
回调方法:
private class MyCPCheckUpdateCallback implements CPCheckUpdateCallback {
@Override
public void onCheckUpdateCallback(AppUpdateInfo info, AppUpdateInfoForInstall infoForInstall) {
LogUtils.i("-----------------------------------------------------------");
LogUtils.i("info: " + info);
LogUtils.i("infoForInstall: " + infoForInstall);
LogUtils.i("-----------------------------------------------------------");
if (info != null) {
long appSize; //应用全量更新包大小(开发者无需关注)
String appSname; //应用名称
String appVersionName; //应用版本名称
String appUrl; //应用全量更新包下载地址(开发者无需关注)
String appChangeLog; //新版本更新信息
appSize = info.getAppSize();
appSname = info.getAppSname();
appVersionName = info.getAppVersionName();
appUrl = info.getAppUrl();
appChangeLog = info.getAppChangeLog(); //新版更新信息
//下面就可以调用自家的更新模块了
UpdateManager mUpdateManager = new UpdateManager(MainActivity.this,
appUrl , "haoyuanqu.apk", appSize);
mUpdateManager.showNoticeDialog(appVersionName, appChangeLog);
}
}
}
如果有更新时,可以从info里面获取更新包的信息,然后就可以调用自家的更新模块进行更新,这样不论用户是否是从百度下载的apk,升级方式都是一样的。
关于 APPUpdateInfo 和 APPUpdateInfoForInstall 两个的说明,具体的可以参考自带的文档。