對於百度強制使用自家自動更新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 兩個的說明,具體的可以參考自帶的文檔。