總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年3月2日 星期五

過濾掉無法launch的AP & 按AP Name英文字母排序

+++++++++++++++++++++++++過濾掉無法launch的AP++++++++++++++++++++++++++++++++++++++

一個 Activity 基本上要在 AndroidManifest.xml 的<intent-filter>中註冊一個 action 和 category; 
        <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
action.MAIN指該 Activity 是個AP的進入點=開啟後的第一個畫面;
category.LAUNCHER指在應用程式選單上會出現該 Activity 的 icon,以方便執行。
當搜尋系統中的應用程式時,會去比對AP的 <intent-filter>,而搜尋條件是包裝在 Intent 物件中以找到符合某種條件程式。

<intent-filter>的內容就像是應用程式的索引,內容比對成功就會回傳相對應的 ResolveInfo
一個應用程式中,可以有多個 Activity 都註冊 CATEGORY_LAUNCHER,那在安裝完後就會有多個 icon 出現在程式選單上,分別能執行各個 Activity。如果 Activity 沒有註冊 CATEGORY_LAUNCHER,那至少要註冊 CATEGORY_DEFAULT,因為它是系統使用 Intent 搜尋的預設條件之一。註冊 CATEGORY_DEFAULT 後該 Activity 不會有 icon 在應用程式選單上出現


 
ArrayList<ApplicationInfo> appCanLaunch = new ArrayList<ApplicationInfo>();
for (ApplicationInfo apAICanLaunch : allappInfo)
{
    Intent intent = packageManager.getLaunchIntentForPackage(apAICanLaunch.packageName);
    //Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
    //如果沒有android.intent.action.MAIN←launch進入點, 則intent=null
    if (intent != null)
    {
        appCanLaunch.add(apAICanLaunch);
    }
}

輸出結果:
Calculator
Dev Tools
Calendar
Browser
Email
Downloads
Clock

++++++++++++++++++++按AP英文字母排序後, 再過濾掉無法launch的AP+++++++++++++++++++++++++

PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> allappInfo = packageManager.getInstalledApplications(PackageManager.GET_ACTIVITIES);
Collections.sort(allappInfo, new ApplicationInfo.DisplayNameComparator(packageManager));
ArrayList<ApplicationInfo> appCanLaunch = new ArrayList<ApplicationInfo>();
for (ApplicationInfo apAICanLaunch : allappInfo)
{
    Intent intent = packageManager.getLaunchIntentForPackage(apAICanLaunch.packageName);
    //Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
    //如果沒有android.intent.action.MAIN←launch進入點, 則intent=null
    if (intent != null)
    {
        appCanLaunch.add(apAICanLaunch);
    }
}

輸出結果:
Browser
Calculator
Calendar
Clock
Dev Tools
Downloads
Email

部份參考文獻:http://www.dotblogs.com.tw/neil/archive/2011/08/12/33058.aspx

沒有留言:

張貼留言