構(gòu)建自己的 Android 默認(rèn)啟動器

我把這個默認(rèn)啟動器起名為NewLauncher漓拾,它的功能是能夠以列表的形式展現(xiàn)你設(shè)備上的可啟動應(yīng)用(可啟動應(yīng)用是指用戶點擊主屏幕或啟動器界面上的圖標(biāo)就能打開的應(yīng)用),比如微信,微博晦闰,QQ等等痢站。

使用PackageManager可獲取所有可啟動主Activity,可啟動主Activity都帶有包含MAIN操作(action)和LAUNCHER類別(category)的intent過濾器(intent-filter)冤吨。打開任何一個應(yīng)用項目AndroidManifest.xml文件蒿柳,可以看到

獲取方法如下

private void setupAdapter(){

Intent startupIntent = newIntent(Intent.ACTION_MAIN);

startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);

/**使用了Fragment,所以調(diào)用getActivity()獲取當(dāng)前上下文Context**/

final PackageManager packageManager = getActivity().getPackageManager();

/**獲取匹配的activity列表**/

List<ResolverInfo> activities = packageManager.queryIntentActivities(startupIntent,0);

}

在PackageManager返回的ResolveInfo對象中漩蟆,可以獲取activity標(biāo)簽和其他一些元數(shù)據(jù)垒探。首先,對ResolveInfo對象中的activity標(biāo)簽按首字母排序怠李。

Collections.sort(activities, new Comparator() {

@Override

public intcompare(ResolveInfo o1,ResolveInfo o2) {

PackageManager packageManager1 = getActivity().getPackageManager();

return String.CASE_INSENSITIVE_ORDER.compare(

o1.loadLabel(packageManager1).toString(),

o2.loadLabel(packageManager1).toString());

}

});

要創(chuàng)建啟動activity的顯示intent圾叼,需要從ResolveInfo對象中獲取activity的包名與類名,這些信息可以從ResolveInfo對象的ActivityInfo中獲取捺癞。下面創(chuàng)建一個顯示intent并啟動目標(biāo)activity

@Override

public void onClick(View v) {

/**mResolveInfo就是之前獲取的activities**/

ActivityInfo activityInfo = mResolveInfo.activityInfo;

Intent i = newIntent(Intent.ACTION_MAIN)

.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name)

/**為了在啟動新activity時啟動新任務(wù)夷蚊,需要為intent添加一個標(biāo)志

FLAG_ACTIVITY_NEW_TASK標(biāo)志控制每個activity僅創(chuàng)建一個任務(wù)**/

.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(i);

作為顯示intent的一部分,我們還發(fā)送了ACTION_MAIN操作翘簇。發(fā)送的intent是否包含操作(action)撬码,對于大多數(shù)應(yīng)用來說沒有什么差別,不過版保,有些應(yīng)用的啟動行為可能會有所不同呜笑。取決與不同的啟動要求夫否,同樣的activity可能會顯示不同的用戶界面。開發(fā)人員最好能明確啟動意圖叫胁,以便讓activity完成它應(yīng)該完成的任務(wù)凰慈。

通常的顯示intent創(chuàng)建一般使用接受Context和Class對象的Intent構(gòu)造方法

public Intent(Context packageContext, Class<?> cls)

該構(gòu)造方法使用傳入的參數(shù)來獲取Intent需要的ComponentName,ComponentName由包名和類名共同組成驼鹅。該構(gòu)造方法會通過Activity類自行確定全路徑包名微谓。也可以自己通過包名和類名創(chuàng)建ComponentName,然后使用下面的Intent方法創(chuàng)建顯示intent

public Intent setComponent(Component component)

不過输钩,setClassName(...)方法能夠自動創(chuàng)建ComponentName豺型,需要實現(xiàn)的代碼相對較少。

public Intent setClassName(String packageName, String className)

通過添加HOMEDEFAULT類別定義买乃,NewLauncher應(yīng)用的activity會成為可選的主界面姻氨,進入設(shè)置-->應(yīng)用管理-->選擇默認(rèn)應(yīng)用設(shè)置-->桌面-->選擇NewLauncher即可。不用擔(dān)心剪验,之后再通過相同的操作便可修改回來肴焊,別忘了,我們可以通過NewLauncher啟動設(shè)置功戚。

有關(guān)Fragment和RecyclerView的使用并沒有本文闡述娶眷,因為目前為止,這個應(yīng)用都比較簡單啸臀,有興趣的朋友可以在這個鏈接查看源代碼届宠。

該應(yīng)用還有很多可以擴展的地方,希望有一天可以自己做出一個覺得可以替代系統(tǒng)桌面的應(yīng)用啟動器壳咕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末席揽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谓厘,更是在濱河造成了極大的恐慌,老刑警劉巖寸谜,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竟稳,死亡現(xiàn)場離奇詭異,居然都是意外死亡熊痴,警方通過查閱死者的電腦和手機他爸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來果善,“玉大人诊笤,你說我怎么就攤上這事〗砩拢” “怎么了讨跟?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵纪他,是天一觀的道長。 經(jīng)常有香客問我晾匠,道長茶袒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任凉馆,我火速辦了婚禮薪寓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澜共。我一直安慰自己向叉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布嗦董。 她就那樣靜靜地躺著植康,像睡著了一般。 火紅的嫁衣襯著肌膚如雪展懈。 梳的紋絲不亂的頭發(fā)上销睁,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音存崖,去河邊找鬼冻记。 笑死,一個胖子當(dāng)著我的面吹牛来惧,可吹牛的內(nèi)容都是我干的冗栗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼供搀,長吁一口氣:“原來是場噩夢啊……” “哼隅居!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葛虐,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胎源,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屿脐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕蚤,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年的诵,在試婚紗的時候發(fā)現(xiàn)自己被綠了万栅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡西疤,死狀恐怖烦粒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情代赁,我是刑警寧澤扰她,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布兽掰,位于F島的核電站,受9級特大地震影響义黎,放射性物質(zhì)發(fā)生泄漏禾进。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一廉涕、第九天 我趴在偏房一處隱蔽的房頂上張望泻云。 院中可真熱鬧,春花似錦狐蜕、人聲如沸宠纯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婆瓜。三九已至,卻和暖如春贡羔,著一層夾襖步出監(jiān)牢的瞬間廉白,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工乖寒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猴蹂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓楣嘁,卻偏偏與公主長得像磅轻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逐虚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容