Android API个人库的建设(附源码)


建设个人的API库, 不但可以积累一些常见的工作经验, 更重要的养成持续改进的好习惯, 因此决定从今天起, 开始建设Android的API库, 关键点在于

1. 常用GUI

2. 四大组件的应用场景

3. IPC 场景

4 JNI场景

5 Binder 机制, 尤其是本地侧 


借助系统Activity过滤的功能, 可以自动实现对上述的系统API描述的Activity进行加载, 加载如下面的源码所示:

  1. package com.ostrichmyself;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import android.app.ListActivity;  
  8. import android.content.Intent;  
  9. import android.content.pm.PackageManager;  
  10. import android.content.pm.ResolveInfo;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13. import android.view.View;  
  14. import android.widget.ListView;  
  15. import android.widget.SimpleAdapter;  
  16.   
  17. /** 
  18.  * 这个界面完全是用来展示的, 它的作用是启动其它待展示的Activity. 
  19.  * 目前用List方式去展示, 参考API Demo的实现 
  20.  * @author tiant5 
  21.  * 
  22.  */  
  23. public class MainActivity extends ListActivity {  
  24.     /** Called when the activity is first created. */  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.           
  29.           
  30.           
  31.         setListAdapter(new SimpleAdapter(this, getData(),  
  32.                 android.R.layout.simple_list_item_1, new String[] { "title"},  
  33.                 new int[] { android.R.id.text1}));  
  34.         getListView().setTextFilterEnabled(true);  
  35.           
  36.           
  37.   
  38.     }  
  39.       
  40.     private List<HashMap<String, Object>> getData()  
  41.     {  
  42.           
  43.         ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();  
  44.         //通过下面的方式提取设定的UI Activity   
  45.         Intent mainIntent = new Intent("action.ostrichmyself.ui"null);  
  46.         mainIntent.addCategory("catagory.ostrichmyself.ui");  
  47.   
  48.         PackageManager pm = getPackageManager();  
  49.         List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);  
  50.         for (int i = 0; i < list.size(); i++)  
  51.         {  
  52.             HashMap<String, Object> hashMap = new HashMap<String, Object>();  
  53.             ResolveInfo info = list.get(i);  
  54.             Log.e("--ostrichmyself--", info.activityInfo + "-activeInfo-");  
  55.             hashMap.put("title", info.loadLabel(pm).toString());  
  56.             Intent intent = createIntent(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);  
  57.             hashMap.put("intent", intent);  
  58.             data.add(hashMap);  
  59.         }  
  60.         return data;  
  61.     }  
  62.       
  63.     protected Intent createIntent(String pkg, String componentName) {  
  64.         Intent result = new Intent();  
  65.         result.setClassName(pkg, componentName);  
  66.         return result;  
  67.     }  
  68.       
  69.       
  70.     @Override  
  71.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  72.         HashMap<String, Object> map = (HashMap<String, Object>) l.getItemAtPosition(position);  
  73.   
  74.         Intent intent = (Intent) map.get("intent");  
  75.         startActivity(intent);  
  76.     }  
  77. }  
这样,当Manifest.mf文件中描述了对应的action为action.ostrichmyself.ui; category为category.ostrichmyself.ui的activity时, 将自动加载成列表.Manifest.mf文件如下描述:
  1. <activity android:name=".composite.GridActivity001" android:label="Grid效果">  
  2.     <intent-filter>  
  3.         <category android:name="catagory.ostrichmyself.ui" />  
  4.          <action android:name="action.ostrichmyself.ui" />  
  5.     </intent-filter>  
  6. </activity>  

第一批纳入规划的为UI的布局, 这些布局大多来自比较优秀的实践, 部分采用了反编译的方式得到.


  1. 并列的应用列表方式.
  2. 优秀实践的登录界面

展示效果:

Android API个人库的建设
Android API个人库的建设

Android API个人库的建设源码下载地址:

相关文件下载在帮客之家的1号FTP服务器里,下载地址:

FTP地址:ftp://www.bkjia.com

用户名:www.bkjia.com

密码:www.muu.cc

在 2011年LinuxIDC.com\10月\10月\Android API个人库的建设源码

下载方法见 http://www.bkjia.net/thread-1187-1-1.html

相关内容