我知道,Android啓動包名是com.android.launcher
除了可能會或可能不會有任何給定的設備上。實際上,我預計它可能只有百分之幾的設備。大多數製造商用他們自己的替換股票主屏幕。
想知道如果也許有一些替代方式?
使用PackageManager
和queryIntentActivities()
找到支持ACTION_MAIN
和CATEGORY_HOME
的所有活動。從列表中刪除您的活動。如果只剩下一個,請啓動該活動。如果還有多個選項,請啓動自己的選擇器以顯示可用選項。這樣,無論其他主屏如何存在,您都可以啓動它。
UPDATE
給出一個ResolveInfo
名爲launchable
和ACTION_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);
共享,這是其實我在做什麼(爲了這個問題,我簡化了)。問題是我不知道*如何啓動它。我所擁有的只是包名(當我說「我知道......等等」時,這就是我的意思。那麼,當我引用上面的方法時,如何將該包名轉換爲可啓動的(或可驅動的)意圖(getLaunchIntentForPackage)在封裝上返回null,這是通過消除進程是主頁Android啓動器(並且在此設備上恰好是「com.android.launcher」)? –
@ Dr.Dredel:查看更新。您可以看到更多擴展這裏的例子:https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot在這種情況下,我實現了一個啓動器,所以我的模板'Intent'是用於'CATEGORY_LAUNCHER',而不是'CATEGORY_HOME ',我從'ListView'點擊獲得'ResolveInfo'。 – CommonsWare
可愛,謝謝! –