前两章用apkplug框架实现了两个基本的功能,但它们都是在本地安装测试的,在实际开发过程中我们肯定是需要与服务器联网将更新的插件远程推送给用户手机客户端。今天利用apkplug提供的插件托管服务轻松实现插件的远程部署与客户端更新。
一,还是利用上一章所建的主应用,只是在主应用的assert文件夹中添加一个插件"BundleService0.0.2.apk",该插件是apkplug官网提供服务插件,它封装了与托管服务器通讯,文件下载,文件缓存等功能只留出了简单易用的接口给开发者,开发者通过接口可以任意设计自己的应用界面而不必关心通讯细节。
二,编写我们自己的应用更新插件
首先新建一个工程MyApkplugService 照例编写插件所必须的几个java类和plug.xml文档。工程结构如图
在这个插件中我们除了需要添加osgi.jar包以外还需要添加installService0.0.2.jar来与我们的BundleService0.0.2.apk插件通讯。
环境搭建好了现在我们可以在MyApkplugService通过与BundleService0.0.2.apk插件通讯更新下载插件了。
三 编写自己的应用管理插件
BundleService0.0.2.apk插件对插件管理的整个过程都封装的很好,提供给开发者一个灵活而方便的操作方式,其接口主要有
1.appSearch.java 通过这个接口我们可以任意组合查询条件如插件 appid,插件名称 appname,查询页page,插件关键词b_keywords,插件添加时间排序方式b_order等
2.appDownload.java 通过这个接口可以实现插件的自动下载安装
3.checkupdate.java 通过这个接口我们可以查询服务端插件与本地插件的差异,进而进行以后的操作
简单说明了托管服务的接口下面就通过具体的代码讲解其使用过程
我们的MyApkplugService只使用一个MainActivity做为显示界面。
首先我们编写一个search()函数来查找BundleService0.0.2.apk提供的appSearch接口,通过这个接口我们就可以查询服务器上的插件了代码入下
02 |
* 插件搜索服务 appSearch 为BundleService提供的一个插件搜索服务 |
03 |
* @param bean appSearchBean 可以填写你搜索插件的一些搜索条件 比如按关键词搜索 按时间排序 按模糊名称搜索等 |
04 |
* @param callback 为服务结果回调接口 开发者可以通过该接口可以得知返回结果进行后续操作 |
06 |
public void search(appSearchBean bean,AppSearchCallBack callback){ |
07 |
ServiceReference reference=BundleContextFactory.getInstance().getBundleContext() |
08 |
.getServiceReference(appSearch. class .getName()); |
11 |
appSearch service=(appSearch) BundleContextFactory.getInstance().getBundleContext() |
12 |
.getService(reference); |
15 |
service.search(bean,callback); |
17 |
BundleContextFactory.getInstance().getBundleContext() |
18 |
.ungetService(reference); |
当我们获取到appSearch 接口以后便可以service.search(appSearchBean bean,AppSearchCallBack callback);方法进行查询了。
appSearchBean.java类是一个查询类bean我们可以传入我们的查询条件
AppSearchCallBack.java类是一个回调函数,异步查询完成以后的值将通过这个回调函数返回给我们
以下便是我们初始化时查询代码
02 |
public void updataDate(){ |
04 |
appSearchBean bean= new appSearchBean(); |
06 |
bean.setB_keywords( "test" ); |
08 |
bean.setG_order(appSearchBean.order_desc); |
10 |
bean.setB_btime( "2013-10-15" ); |
17 |
search(bean, new AppSearchCallBack(){ |
19 |
public void onSuccess( int stutas,msg msg,appSearchBean bean) { |
22 |
if (msg.getStutes()>= 0 ){ |
27 |
List aps=(List)msg.getMsg(); |
28 |
for ( int i = 0 ; i < aps.size(); i++) { |
29 |
appBean ab=aps.get(i); |
33 |
MainActivity. this .getListView().post( new Runnable(){ |
35 |
adapter.notifyDataSetChanged(); |
44 |
public void onFailure( int arg0, final String arg1) { |
很简单吧,通过这样就完成了客户端的开发工作。
四 注册帐号-->将主应用添加到服务器上如图
将插件apk上传到服务器上并且将插件与主应用绑定 如图
添加完成以后我们也可以看该应用一个添加了的插件
设置插件的关键词(可以做为我们本地查询的一个条件)
至此整个过程便都操作完毕了,我们可以运行应用查看效果了 如图
点击运行
最后源码奉上
最后注意的是服务器以应用的包路径做为ID(主应用和插件都是),所以在服务器上包路径是不可以重复了(跟应用商店一样),如果你要用以上的源码实验请修改为你自己的包路径再上传。