Framework 學(xué)習(xí)筆記

一.AppWidgetManager

AppWidgetManager是在系統(tǒng)啟動(dòng)時(shí)運(yùn)行的單例對(duì)象。這意味著每個(gè)啟動(dòng)器的每個(gè)實(shí)例都使用相同的AppWidgetManager。他們的AppWidgetHost和他們目前持有的RemoteView有什么區(qū)別。 AppWidgetManager基本上保存所有活動(dòng)主機(jī)及其持有的小部件的列表。 AppWidgetHost不是一個(gè)有限的對(duì)象。也就是說(shuō),任何活動(dòng)可能都有一個(gè)主機(jī)。因此,整個(gè)應(yīng)用程序可能只是Widgets,如果他們這樣選擇。

當(dāng)您實(shí)例化主機(jī)時(shí),您必須添加視圖。所以,基本上它是一個(gè)沒(méi)有強(qiáng)制父母限制的子視圖列表,除了你的活動(dòng)給它。首先,你要求一個(gè)ID(通過(guò)myHost.allocateAppWidgetId())。然后你使用你的選擇小部件活動(dòng)/對(duì)話框。 Dialog返回WidgetInfo。當(dāng)您要求主機(jī)通過(guò)WidgetInfo和您要求的ID創(chuàng)建View(通過(guò)createView)時(shí),將檢索該視圖。然后,它要求窗口小部件的RemoteView。

最后,通過(guò)將活動(dòng)中的“視圖”作為子項(xiàng)來(lái)綁定小部件。這通過(guò)包含所有Widget的ViewGroup的addView()方法完成。

首先,你必須確保你的Android清單中有這個(gè):

<uses-permission android:name="android.permission.BIND_APPWIDGET" />
接下來(lái),你必須創(chuàng)建一個(gè)AppWidgetHost(我為我的發(fā)射器擴(kuò)展自己)。主機(jī)的關(guān)鍵是通過(guò)AppWidgetManager.getInstance();保持對(duì)AppWidgetManager的引用。

AppWidgetHost myHost = new AppWidgetHost(context, SOME_NUMERICAL_CONSTANT_AS_AN_ID);
現(xiàn)在,得到你的ID:

myHost.allocateAppWidgetId()
下一步是通過(guò)您用來(lái)獲取窗口小部件信息的任何方法完成的。大多數(shù)情況下,它通過(guò)onActivityResult通過(guò)Intent返回?,F(xiàn)在,您所需要做的就是使用appInfo并創(chuàng)建視圖。 WidgetId通常由pick widget活動(dòng)結(jié)果提供。

AppWidgetProviderInfo withWidgetInfo
= AppWidgetManager.getInstance().getAppWidgetInfo(forWidgetId);
AppWidgetHostView hostView
= myWidgetHost.createView(myContext, forWidgetId, withWidgetInfo);
hostView.setAppWidget(forWidgetId, withWidgetInfo);
現(xiàn)在你只需將View作為一個(gè)孩子綁定到你要綁定的任何東西。

myViewGroup.addView(hostView);
當(dāng)然,你總是要考慮在哪里和如何放置它等等。另外,你必須確保你的AppWidgetHost在開始添加小部件之前正在偵聽(tīng)。

myHost.startListening()

總結(jié)一下

Widget綁定過(guò)程跨越許多方法和步驟,但都通過(guò)AppWidgetHost發(fā)生。因?yàn)樾〔考窃谀拿臻g之外編碼的,除了放置它們的位置以及視圖的大小之外,您沒(méi)有任何控制權(quán)。由于最終代碼運(yùn)行在您的空間,而是在您的控制之外,AppWidgetManager充當(dāng)中立的調(diào)解員,而AppWidgetHost代表您的應(yīng)用程序的協(xié)調(diào)人。一旦了解,您的任務(wù)很簡(jiǎn)單。以上步驟是所有自定義啟動(dòng)器(包括我自己的)所需的步驟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容