編輯:關於Android編程
本教程是基於apkplug V1.6.8 版本編寫 最新開發方式以官網為准
可下載最新的apkplugdemo源碼http://git.oschina.net/plug/apkplugDemos
apkplugdemo演示圖
一 apkplugdemo工程源碼結構
src
"-com.apkplugdemo.adapter --插件列表Adapter
|-com.apkplugdemo.adapter.base --adapter 基類
|-com.apkplugdemo.FileUtil --文件操作類
|-com.apkplugdemo.FileUtil.filter --文件類型過濾類
|-com.apkplugdemo.util --項目通用工具類
|-com.apkplugdemo.util.Observer --java觀察者設計模式類
|-com.apkplugdemo.util.preferencesFactory --preferences操作類
|-com.example.apkplugdemo --項目application 和activity類
|-huahua.viewpager --與com.example.apkplugdemo功能相同 只是提供fragment方式展示
二 閱讀方式
根據以上結構可以看出除去工具類我們需要閱讀的代碼並不多
com.apkplugdemo.adapter.ListBundleAdapter --負責首頁列表Item展示以及 "運行"按鈕事件
com.example.apkplugdemo.ProxyApplication --負責啟動apkplug框架,以及安裝assets目錄下的插件 (通過InstallBundle類安裝)
com.example.apkplugdemo.MyProperty --啟動框架需要的接口類,為框架提供本地化變量保存於獲取的接口 (老版本還提供自啟插件的安裝 v1.6.8版本用BundleControl服務替代)
com.example.apkplugdemo.MainActivity --項目啟動類,展示已安裝插件列表,提供安裝SD卡中插件的按鈕等功能
com.example.apkplugdemo.InstallBundle --啟動assets目錄下的插件
三 ProxyApplication
ProxyApplication 只啟動框架 然後調用InstallBundle啟動插件
01
public
void
onCreate()
{
02
super
.onCreate();
03
try
{
04
List
activators=
new
java.util.ArrayList();
05
//將服務加入框架,框架將在啟動時啟動這些服務
06
activators.add(
new
appServiceManager());
07
frame=FrameworkFactory.getInstance().start(activators,
this
,
new
MyProperty(
this
.getApplicationContext()));
08
BundleContext
context =frame.getSystemBundleContext();
09
//安裝assets文件夾下的插件
該類替代了MyProperty.AutoStart()方法 ,1.6.7以上建議使用新方式
10
InstallBundle
ib=
new
InstallBundle();
11
ib.installBundle(getApplicationContext(),
context,
12
new
installCallback(){
13
@Override
14
public
void
callback(
int
arg0,
Bundle arg1) {
15
if
(arg0==installCallback.stutas5||arg0==installCallback.stutas7){
16
Log.d(
""
,String.format(
"插件安裝
%s : %d"
,arg1.getName(),arg0));
17
return
;
18
}
else
{
19
Log.d(
""
,
"插件安裝失敗
:%s"
+arg1.getName());
20
}
21
}
22
});
23
}
catch
(Exception
ex){
24
System.err.println(
"Could
not create : "
+
ex);
25
ex.printStackTrace();
26
int
nPid
= android.os.Process.myPid();
27
android.os.Process.killProcess(nPid);
28
}
29
}
四 InstallBundle 安裝插件實現
InstallBundle 是調用BundleControl實現將assets目錄中的apk文件安裝到宿主應用中的,詳細可看
//從assets目錄中復制apk文件到SD卡中 InputStream in=context.getAssets().open("BundleDemoOSGIService1.apk"); File f0=new File(context.getFilesDir(),"BundleDemoOSGIService1.apk"); if(!f0.exists()){ copy(in, f0); //第一次啟動時執行安裝,以後就不執行了 // startlevel設置為1插件會自啟 isCheckVersion不檢測插件版本覆蓋更新 this.install(mBundleContext,"file:"+f0.getAbsolutePath(),callback,1,false); }
五 MainActivity 界面代碼
MainActivity 初始化函數
initBundleList() -- 獲取已安裝插件 <獲取apkplug已安裝插件-03>
ListenerBundleEvent() --監聽插件安裝事件 <監聽apkplug插件安裝事件>
apkplugdemo有關於apkplug框架的調用就是這些了,其他工具性的代碼感興趣的同學可以自己看。
android:gravity:設置的是控件自身上面的內容位置android:layout_gravity:設置控件本身相對於父控件的顯示位置。看下如下代碼段復制代碼 代
小豬的Android入門之路 Day 7 part 4 Android的數據存儲與訪問之——ContentProvider(內容提供者)
首先推薦一下鴻洋大大的打造個性的圖片預覽與多點觸控視頻教程,這套教程教我們一步一步實現了多點觸控實現對圖片的平移和縮放的功能,這篇文章我將在鴻洋大大的基礎之上做了一些擴展
1、概述Drawable在我們平時的開發中,基本都會用到,而且給大家非常的有用。那麼什麼是Drawable呢?能夠在canvas上繪制的一個玩意,而且相比於View,並不