基於android 2.3.3的API Demos。
先看下ApiDemosApplication.java這個類,這個類繼承自Application,主要作用是儲存一些全域的狀態,這個類會在你的應用程式建立時便被執行個體化,
這個類的類名,便是AndroidManifest.xml 的 <application> tag的name。比如在這個類中onCreate()中:PreferenceManager.setDefaultValues(this, R.xml.default_values, false);
這個方法將會從default_values.xml中填充預設的值到com.example.android.apis_preferences.xml這個預設的設定檔中去。
這個設定檔在/data/data/com.example.android.apis/shared_prefs/下。根據官方API,This should be called by the application's main activity.
這樣其他的activity、service等才能相應的使用這個設定檔。
接著看下ApiDemos.java,這個類充分應用了AndroidManifest.xml這個檔案。首先這個類是程式入口,一個ListActivity,這個類會重複利用到。
在其onCreate()方法裡,第一次時path=""即prefix="",接著看getData()這個方法,這個方法就是給這個listview填值的,填入的值放在myData這個List<Map>中:
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
PackageManager pm = getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
這段代碼將AndroidManifest.xml檔案中所有Intent action是ACTION_MAIN及category是CATEGORY_SAMPLE_CODE的activity全部取得。放入list中。
下面就是一些邏輯了,應該能看懂。
ResolveInfo info = list.get(i);
CharSequence labelSeq = info.loadLabel(pm);
取得所有activity的label,label的格式類似於App/Activity/Hello World這樣的,如果我們點擊App或者Activity時還是調用ApiDemos.java這個類,只是listview的內容
在變而已,在browseIntent()這個方法中。
每個清單項目是按照首個字元的ascii碼排序的,在sDisplayNameComparator中可以看到,清單項目還可以按照你輸入的字元過濾。