2012-06-18 74 views
2

我創建了一個作爲啓動器的應用程序,它按預期工作,但我想讓用戶能夠啓動本機Android啓動器。如何啓動com.android.launcher?

我知道,Android啓動包名是com.android.launcher

然而,當我試圖通過調用

packageManager.getLaunchIntentForPackage("com.android.launcher"); 

,來了空從這個包得到啓動意圖名。

所以,我不知道如何使用包名來啓動它,並且想知道是否有一些替代方法?

TIA

回答

6

我知道,Android啓動包名是com.android.launcher

除了可能會或可能不會有任何給定的設備上。實際上,我預計它可能只有百分之幾的設備。大多數製造商用他們自己的替換股票主屏幕。

想知道如果也許有一些替代方式?

使用PackageManagerqueryIntentActivities()找到支持ACTION_MAINCATEGORY_HOME的所有活動。從列表中刪除您的活動。如果只剩下一個,請啓動該活動。如果還有多個選項,請啓動自己的選擇器以顯示可用選項。這樣,無論其他主屏如何存在,您都可以啓動它。

UPDATE

給出一個ResolveInfo名爲launchableACTION_MAIN/CATEGORY_HOME模板Intent命名i,推出這一活動,做到:

ActivityInfo activity=launchable.activityInfo; 
ComponentName name=new ComponentName(activity.applicationInfo.packageName, 
            activity.name); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
      Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
i.setComponent(name); 

startActivity(i); 
+0

共享,這是其實我在做什麼(爲了這個問題,我簡化了)。問題是我不知道*如何啓動它。我所擁有的只是包名(當我說「我知道......等等」時,這就是我的意思。那麼,當我引用上面的方法時,如何將該包名轉換爲可啓動的(或可驅動的)意圖(getLaunchIntentForPackage)在封裝上返回null,這是通過消除進程是主頁Android啓動器(並且在此設備上恰好是「com.android.launcher」)? –

+0

@ Dr.Dredel:查看更新。您可以看到更多擴展這裏的例子:https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot在這種情況下,我實現了一個啓動器,所以我的模板'Intent'是用於'CATEGORY_LAUNCHER',而不是'CATEGORY_HOME ',我從'ListView'點擊獲得'ResolveInfo'。 – CommonsWare

+0

可愛,謝謝! –