Re: [問題]APP兒童模式與老人模式開發原理

作者: Jasonzheng (jason)   2016-11-19 10:52:05
您好,假設小弟沒有誤解您的意思:
您想讓按下 home 鍵時,變成自訂主頁,並且不出現在總覽畫面?
這樣的功能實現是透過 Activity 沒錯
並且平常所使用的系統主畫面,就是由 Activity 實現的,
點擊 app 圖示,打開應用,則是透過 startActivity() 送出 intent。
官方原碼可以去這邊看
https://android.googlesource.com/platform/packages/apps/Launcher3/
在這之前得知道
1. Activity 是搭配 Task 運作, Task 是 『相關』 Activity 之集合 ,
且實作堆疊的資料結構 (LIFO) 。
2. Intent 分為 明確式 (Explicit) 與 隱含示 (Implicit),
明示就是有確切的給予目標類別 如 new Intent(this, OtherActivity.class);
其他都是隱含示。
實作開始:
1. 在 AndroidManifest.xml 中,找到想作為主頁的 Activity 的 start tag <>,
加入
android:launchMode="singleTask"
android:taskAffinity=""
android:stateNotNeeded="true"
第一行的作用是: 改變 Activity 的 『啟動模式』,
讓 Task 的 底端 保有此 Activity 的實例 。
第二行的作用是: 所有 Activity 預設的 taskAffinity 都是其 Package,
這裡設為空字串,代表不隸屬於其他 Task
第三行的作用是: 不接收狀態
2. 接著, 在該 Activity 的 <intent-filter> </intent-filter> 中,
加入
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.HOME" />
第一行的作用是: 確保該 Activity 能接收到所有的 隱含式 Intent
第二行的作用是: 設定此 Activity 為裝置的首頁,需搭配前者使用
大概會長這個樣子
https://pastebin.com/embed_iframe/wrQCwk5x
希望有幫到你~
參考資料:
https://developer.android.com/reference/android/content/Intent.html
作者: pttnews (PTT新聞)   2016-11-19 20:50:00
好人給推
作者: str5 (chie)   2016-11-20 00:21:00
非常感謝熱心的版大! 看完了版大分享的資料之後茅塞頓開

Links booklink

Contact Us: admin [ a t ] ucptt.com