注:本文是基於託管服務TuoCloudService1.0.0講解的 項目地址爲http://git.oschina.net/plug/ApkplugCloudServiceDemo java
一,插件託管服務支持的功能 android
v1.0.0支持的功能以下: git
注:它們都是以OSGI服務對外提供服務的,關於OSGI可百度查詢,但同時咱們提供模板代碼,咱們但願你們能夠利用模板代碼漸進式的學習 <apkplug中OSGI服務基本原理> 服務器
1.插件託管: 網絡
開發者可將宿主應用與插件上傳到服務器上,並隨意綁定宿主與插件的對應關係。 app
2.客戶端多條件查詢: 框架
OSGI服務名:"com.apkplug.service.SearchApp.appSearch" 工具
目前支持的插件查詢條件有 插件名(appname) 設置的關鍵詞(b_keywords) 可按插件添加日期排序 post
注:插件必須與宿主綁定纔可被查詢到 學習
3.插件版本狀態查詢:
OSGI服務名:com.apkplug.service.update.checkupdate
可批量查詢該宿主對應的插件版本狀態
4.插件文件下載:
OSGI服務名:"com.apkplug.service.download.AppDownload"
經過查詢(2)或插件版本更新功能(3)可獲取appBean,經過它可下載插件文件。
二,宿主應用集成插件託管服務
1)插件託管服務是一個jar包咱們只須要將其放置於宿主文件夾的libs目錄中便可。如圖
2)將插件託管的OSGI服務註冊到apkplug框架中
詳細代碼在 com.apkplug.cloudservicedemo.ProxyApplication 類中
try{ //com.apkplug.appServiceManager 爲TuoCloudService1.0.0.jar包提供的插件託管服務啓動BundleActivator List activators=new java.util.ArrayList<BundleActivator>(); //將服務加入框架,框架將在啓動時啓動這些服務 activators.add(new appServiceManager()); frame=FrameworkFactory.getInstance().start(activators,this,new MyProperty(this.getApplicationContext())); }catch (Exception ex){ System.err.println("Could not create : " + ex); ex.printStackTrace(); int nPid = android.os.Process.myPid(); android.os.Process.killProcess(nPid); }
三, 使用插件託管服務接口查詢
上一步咱們將託管服務已經所有註冊到apkplug框架裏面了,因此當使用時只須要找到服務,以下爲模板代碼:
注:代碼位置 com.apkplug.cloudservicedemo.activity.SearchActivity
/** * appSearch 插件搜索服務 * @param context 插件上下文 * @param bean 查詢條件填充 bean * @param callback 查詢結果回調接口 */ public void search(BundleContext context,appSearchBean bean,AppSearchCallBack callback){ ServiceReference reference=context.getServiceReference(appSearch.class.getName()); if(null!=reference){ appSearch service=(appSearch)context.getService(reference); if(service!=null){ service.search(bean,callback); } context.ungetService(reference); } }
appSearchBean bean 是插件條件bean ,咱們能夠經過填充它來設置一些查詢條件
AppSearchCallBack callback 查詢過程或結果將經過該接口返回
public void updataDate(BundleContext context){ bean=new appSearchBean(); //按插件被添加到分組(宿主)的時間逆序查詢 bean.setG_order(appSearchBean.order_desc); //插件的關鍵詞keyword bean.setB_keywords("工具"); bean.setPagenum(10); bean.setPage(0); //查詢 search(context,bean,new impAppSearchCallBack()); }
class impAppSearchCallBack implements AppSearchCallBack{ public void onFailure(int arg0, final String arg1) { //服務查詢失敗 } public void onSuccess(int stutas, CallBackMSG msg,appSearchBean arg2) { //服務查詢成功 if(stutas>=0){ if(msg.getStutes()>=0){ //查詢正確 //獲取查詢到的插件 List<appBean> aps=(List)msg.getMsg(); }else{ //查詢條件異常 } }else{ //網絡異常 } } }
注:查詢完成後返回的appSearchBean arg2能夠獲取到該條件下服務端插件整體數量以及當前返回頁