建設個人的API庫, 不但可以積累一些常見的工作經驗, 更重要的養成持續改進的好習慣, 因此決定從今天起, 開始建設Android的API庫, 關鍵點在於
1. 常用GUI
2. 四大組件的應用場景
3. IPC 場景
4 JNI場景
5 Binder 機制, 尤其是本地側
借助系統Activity過濾的功能, 可以自動實現對上述的系統API描述的Activity進行加載, 加載如下面的源碼所示:
- package com.ostrichmyself;
-
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
-
- import android.app.ListActivity;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.content.pm.ResolveInfo;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
-
- /**
- * 這個界面完全是用來展示的, 它的作用是啟動其它待展示的Activity.
- * 目前用List方式去展示, 參考API Demo的實現
- * @author tiant5
- *
- */
- public class MainActivity extends ListActivity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
-
-
- setListAdapter(new SimpleAdapter(this, getData(),
- android.R.layout.simple_list_item_1, new String[] { "title"},
- new int[] { android.R.id.text1}));
- getListView().setTextFilterEnabled(true);
-
-
-
- }
-
- private List<HashMap<String, Object>> getData()
- {
-
- ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
- //通過下面的方式提取設定的UI Activity
- Intent mainIntent = new Intent("action.ostrichmyself.ui", null);
- mainIntent.addCategory("catagory.ostrichmyself.ui");
-
- PackageManager pm = getPackageManager();
- List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
- for (int i = 0; i < list.size(); i++)
- {
- HashMap<String, Object> hashMap = new HashMap<String, Object>();
- ResolveInfo info = list.get(i);
- Log.e("--ostrichmyself--", info.activityInfo + "-activeInfo-");
- hashMap.put("title", info.loadLabel(pm).toString());
- Intent intent = createIntent(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
- hashMap.put("intent", intent);
- data.add(hashMap);
- }
- return data;
- }
-
- protected Intent createIntent(String pkg, String componentName) {
- Intent result = new Intent();
- result.setClassName(pkg, componentName);
- return result;
- }
-
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- HashMap<String, Object> map = (HashMap<String, Object>) l.getItemAtPosition(position);
-
- Intent intent = (Intent) map.get("intent");
- startActivity(intent);
- }
- }
這樣,當Manifest.mf文件中描述了對應的action為action.ostrichmyself.ui; category為category.ostrichmyself.ui的activity時, 將自動加載成列表.Manifest.mf文件如下描述:
- <activity android:name=".composite.GridActivity001" android:label="Grid效果">
- <intent-filter>
- <category android:name="catagory.ostrichmyself.ui" />
- <action android:name="action.ostrichmyself.ui" />
- </intent-filter>
- </activity>
第一批納入規劃的為UI的布局, 這些布局大多來自比較優秀的實踐, 部分采用了反編譯的方式得到.
- 並列的應用列表方式.
- 優秀實踐的登錄界面
展示效果:
Android API個人庫的建設源碼下載地址:
相關文件下載在Linux公社的1號FTP服務器裡,下載地址:
FTP地址:ftp://www.linuxidc.com
用戶名:www.linuxidc.com
密碼:www.muu.cc
在 2011年LinuxIDC.com\10月\10月\Android API個人庫的建設源碼
下載方法見 http://www.linuxidc.net/thread-1187-1-1.html