结合上节<按条件查询宿主中的插件>,本节下载并按照云端的插件。
实现项目demo http://git.oschina.net/plug/ApkplugCloudServiceDemo
实现代码 :com.apkplugdemo.adapter.SearchBundleAdapter
一,插件下载安装服务
插件下载安装服务也是以OSGI服务形式提供的,获取服务的模板代码为:
//查询插件下载服务 因为该服务在框架启动时启动,所以肯定存在
ServiceReference reference=context.getServiceReference(AppDownload.class.getName());
if(null!=reference){
service=(AppDownload) context.getService(reference);
}
context.ungetService(reference);
二,AppDownload服务接口说明
public interface AppDownload {
/**
* 插件托管服务接口
* @param appBean ab 包含插件基本信息
* @param mContext android上下文
* @param callback 服务回调接口
* @throws IOException
*/
public void download(appBean ab,Context mContext,AppDownloadCallBack callback)throws IOException;
}
三,调用插件安装服务接口下载插件
1)首先应该获取appBean 目前有两种方式可以获取到
1.通过插件搜索服务 即上一节提到的
2.通过插件版本状态服务
2)编写回调接口AppDownloadCallBack
public interface AppDownloadCallBack {
/**
* 安装成功
*/
public final int suc_install=0;
/**
* 安装失败
*/
public final int fail_install=-1;
/**
* 安装成功
*/
public final int suc_download=1;
/**
* 下载失败
*/
public final int fail_download=-2;
/**
* 获取url成功
*/
public final int suc_url=2;
/**
* 获取url失败
*/
public final int fail_url=-2;
/**
* 插件安装成功后
* @param b
*/
public void onInstallSuccess(int stutas,Bundle b);
public void onDownLoadSuccess(String info);
/**
* 插件下载中
* @param bytesWritten 已下载数据
* @param totalSize 总数据大小
* @param Speed 下载速度
* @param bean
*/
public void onProgress(int bytesWritten, int totalSize,String Speed);
/**
* 失败
* @param bean
* @param errorNo
* @param strMsg
*/
public void onFailure(int errorNo ,String strMsg);
}
来源:oschina
链接:https://my.oschina.net/u/138488/blog/267540