name="com.tencent.tmdownloader.TMAssistantDownloadService"
android:
exported="false"
android:
process=":
TMAssistantDownloadSDKService"/>
4.自更新功能接口介绍
我们为调用方提供了两种自更新方式可供选择:
1)跳转到应用宝中进行自更新,如果用户没安装应用宝,则会先自动下载并安装应用宝,安装完成后再跳转到应用宝进行自更新。
应用宝提供了强大的下载和管理功能,可以快速便捷地帮助用户下载更新包。
2)直接使用SDK进行自更新,仅提供简单的自更新逻辑,不提供自更新任务的管理等功能,如下载过程中的暂停,取消,重新开始等。
3)资源包更新(直接在应用中更新),提供资源包更新的目录,
4.
4.1.初始化Manager
自更新的功能主要通过调用TMSelfUpdateManager中的接口实现。
使用自更新SDK前,必须对其进行初始化。
可以参考以下初始化的代码:
//自更新sdk初始化
TMSelfUpdateManagerselfUpdateManager=TMSelfUpdateManager.getInstance();
try{
Contextcontext=getApplication();//application的context
Stringchannelid="990483";//应用宝渠道包的渠道号,申请方法请参见《腾讯应用宝自更新SDK产品介绍》中的产品接入步骤step1
ITMSelfUpdateListenerselfupdateListener=newITMSelfUpdateListener(){
//实现请参考下一小节实现自更新状态监听器部分的内容
};//自更新状态监听器
YYBDownloadListeneryybDownloadListener=newYYBDownloadListener(){
//实现请参考下一小节实现应用宝下载状态监听器部分的内容
};//应用宝下载状态监听器
Bundlebundle=null;//附加参数的bundle,一般情况下传空,可以由外部传入场景信息等,具体字段可参考TMSelfUpdateConst.BUNDLE_KEY_*的定义
selfUpdateManager.init(context,channelid,selfupdateListener,yybDownloadListener,bundle);
}catch(Exceptione){
e.printStackTrace();
}
4.2.实现自更新状态监听器和应用宝下载状态监听器
自更新状态监听器(ITMSelfUpdateListener),是用于监听当前更新包的下载状态变化的回调接口。
应用宝下载状态监听(YYBDownloadListener),是用于监听应用宝的下载状态变化的回调接口,只在跳应用宝进行自更新的时候才会被使用。
这两个监听器在初始化Manager中已经作为参数传入进行注册,需要开发者在回调方法中实现自定义的业务逻辑。
1)实现自更新状态监听器ITMSelfUpdateListener:
privateITMSelfUpdateListenerselfupdateListener=newITMSelfUpdateListener(){
@Override
publicvoidonDownloadAppStateChanged(finalintstate,finalinterrorCode,finalStringerrorMsg){
//TODO更新包下载状态变化的处理逻辑
}
@Override
publicvoidonUpdateInfoReceived(TMSelfUpdateUpdateInfoarg0){
//TODO收到更新信息的处理逻辑
}
@Override
publicvoidonDownloadAppProgressChanged(finallongarg0,finallongarg1){
//TODO更新包下载进度发生变化的处理逻辑
}
};
2)实现应用宝下载状态监听器YYBDownloadListener:
privateYYBDownloadListeneryybDownloadListener=newYYBDownloadListener(){
@Override
publicvoidonDownloadYYBStateChanged(Stringurl,finalintstate,interrorCode,StringerrorMsg){
//TODO应用宝下载状态变化的处理逻辑
}
@Override
publicvoidonDownloadYYBProgressChanged(finalStringurl,finallongreceiveDataLen,finallongtotalDataLen){
//TODO应用宝下载进度变化的处理逻辑
}
};
4.3.开始自更新
调用开始自更新接口即可开始自更新:
selfUpdateManager.startSelfUpdate(isUseYYB);
其传入的参数说明如下:
(1)isUseYYB为true时,使用省流量更新,跳应用宝进行自更新,在应用宝已安装的情况下,会call起调用方app的应用宝详情页,让用户下载更新;在应用宝未安装的情况下,会下载最新的应用宝,必须在Activity的onResume()方法中调用onActivityResume()方法,安装完成应用宝后才会继续call起调用方app的应用宝详情页,让用户下载更新:
@Override
protectedvoidonResume(){
super.onResume();
try{
selfUpdateManager.onActivityResume();
}catch(Throwablee){
e.printStackTrace();
}
}
(2)isUseYYB为false时,无需下载应用宝,使用sdk一条龙服务进行普通更新,包含检查更新、Apk的下载、合成等。
不需要调用onActivityResume()方法。
4.4.释放资源
在TMSelfUpdateManager中提供了destroy()接口进行资源清理,包括移除已经注册过的监听器。
所以在不再使用自更新功能时建议主动调用destroy()释放资源,例如在调用方的Activity的OnDestroy()中释放资源:
@Override
protectedvoidonDestroy(){
super.onDestroy();
selfUpdateManager.destroy();
}
4.5.只检查更新信息
在TMSelfUpdateManager中提供了checkSelfUpdate接口来检查更新信息,更新信息异步回调到ITMSelfUpdateListener中,在onUpdateInfoReceived方法中接受相关的信息。
4.6.更新接口使用示例
1.检查有没最新版本checkSelfUpdate:
try{
selfUpdateManagerSDK.checkSelfUpdate();
}catch(Throwablee){
e.printStackTrace();
TMLog.e(TAG,"exception:
",e);
}
2.在ITMSelfUpdateListener监听的onUpdateInfoReceived中处理checkSelfUpdate回调:
@Override
publicvoidonUpdateInfoReceived(TMSelfUpdateUpdateInfoarg0){
SoftwareUpdateInfoupdateInfo=newSoftwareUpdateInfo();
if(arg0!
=null
&&arg0.getStatus()==TMSelfUpdateUpdateInfo.STATUS_OK
&&arg0.getNewApkSize()>0){
//解析版本号
Stringurl=arg0.getUpdateDownloadUrl();
Stringversion="";
if(url!
=null&&url.length()>0){
String[]temp=url.split("_");
if(temp.length>2){
version=temp[1];
}
}
updateInfo.hasNewVersion=true;
updateInfo.newVersion=version;
updateInfo.updateContent=arg0.getNewFeature();
updateInfo.updateSize=arg0.getNewApkSize();
//patch包大小:
如果不为零则说明有增量包,否则说明只有全量包
updateInfo.patchSize=arg0.getPatchSize();
}
Handlerhandler=newHandler();
handler.getLooper();
if(updateInfo.hasNewVersion){
finalStringnewVersion=updateInfo.newVersion;
handler.post(newRunnable(){
@Override
publicvoidrun(){
//这里可以执行真正的自更新(false:
sdk实现true:
跳转应用宝)
//startSelfUpdate(true);
}
});
}else{
//当前是最新版本
}
}
publicclassSoftwareUpdateInfo{
publicbooleanhasNewVersion=false;
publicStringnewVersion="";
publicStringupdateContent="";
publiclongupdateSize=0;
publiclongpatchSize;
publicintupdateMethod;
}
全量包的下载url:
这里可以根据回调判断服务器有没新版本来显示应用自更新弹框,点击弹框中更新选项再执行更新:
selfUpdateManagerSDK.startSelfUpdate(false);
5.更多功能
除上述功能以外,TMSelfUpdateManager还提供了更多的功能。
5.
5.1.检查应用宝是否存在
intstatus=0;
try{
//检查应用宝安装状态
status=selfUpdateManager.checkYYBInstallState();
}catch(Exceptione){
e.printStackTrace();
}
if(status==TMAssistantDownloadTaskState.ALREADY_INSTALLED){
//TODO:
已安装应用宝:
可直接跳转到应用宝的指定页面;
}elseif(status==TMAssistantDownloadTaskState.UN_INSTALLED){
//TODO:
未安装应用宝:
建议提示用户下载应用宝(需第三方开发者自己实现应用宝的
//下载逻辑)或者不做跳转;
}elseif(status==TMAssistantDownloadTaskState.LOWWER_VERSION_INSTALLED){
//TODO:
当前安装的应用宝版本过低(即不支持跳转):
建议提示用户升级应用宝
//(需第三方开发者自己实现应用宝的升级逻辑)或者不做跳转。
}
如果需要获取当前手机上应用宝的安装状态,TMSelfUpdateManager为你提供了检查应用宝是否正常安装的接口checkYYBInstallState(),可以根据该接口的返回值判断应用宝是否安装(具体返回值的含义请参考接口文档)。
5.2.取消应用宝下载
selfUpdateManager.cancelYYBDownload();
开始下载应用宝后,调用上述方法就可以终止下载应用宝。
5.3.检查应用宝是否已经下载完成
selfUpdateManager.checkYYBDownloaded();
是否已经下载成功的结果会异步返回给调用方,在
privateYYBDownloadListeneryybDownloadListener=newYYBDownloadListener(){
@Override
publicvoidonCheckDownloadYYBState(Stringurl,intstate,
longreceiveDataLen,longtotalDataLen){
//TODO应用宝下载状态检查结果返回
if(state==TMAssistantDownloadTaskState.DownloadSDKTaskState_SUCCEED){
//已经下载成功
}else{
//未下载成功
}
}
}
5.4.开始预下载应用宝
selfUpdateManager.startPreDownloadYYB(false);
传递的参数代表是否下载完成后进行安装,下载的进度等信息仍然会回调到yybDownloadListener中。
至此您已经了解了该SDK的基础API,如需了解详细的SDK接口以及参数定义,请参照接口文档说明。
。