本發明涉及智能終端技術領域,特別涉及一種智能終端的懸浮按鈕的控制方法及裝置。
背景技術:
隨著智能終端使用的普及,為了操作便利,越來越多的用戶會選擇在自己使用的智能終端尤其是智能手機上安裝一些諸如EasyTouch或虛擬按鍵大師等應用,這些應用能夠通過懸浮按鈕和懸浮窗的方式為用戶提供大量便捷、可靠的操作,例如:向用戶提供快捷的聯系人界面,用戶通過單手就可以調出常用聯系人信息;也可以向用戶提供常用的應用列表,使用戶可以快速跳轉到需要的應用;還可以提供很多系統設置功能,如手電筒、藍牙開關、wifi、移動網絡、調節音量大小和調節屏幕亮度等,從而使得用戶非常熱衷于使用虛擬按鍵,相應地減少用戶對系統按鍵的使用,進而延長系統按鍵甚至手機的使用壽命。
在實際使用中,懸浮按鈕在給用戶帶來便利的同時,也給用戶帶來了一定的困擾。例如,用戶在全屏瀏覽圖片時,或者在全屏觀看視頻時,或者在全屏玩游戲等全屏狀態下,懸浮按鈕會一直顯示在屏幕上,從而影響到用戶的全屏使用體驗。為了降低對全屏使用體驗的影響,用戶往往通過將懸浮按鈕拖動到不顯眼的地方,或者通過對懸浮按鈕的透明度進行設置,使得其以半透明狀態進行顯示等,但是這些操作都需要用戶手動干預,智能化程度較低,并且由于懸浮按鈕依舊顯示在屏幕上,并未從根本上解決問題,用戶使用體驗并不理想。
為了提升智能化程度,現有技術中還提供了一種終端屏幕的懸浮按鈕控制方法,包括:判斷終端屏幕是否處于交互狀態;若終端屏幕處于交互狀態,則將懸浮按鈕置于屏幕顯示范圍以內;否則將懸浮按鈕置于屏幕顯示范圍以外;或者,判斷終端屏幕是否處于交互狀態;若終端屏幕處于交互狀態,則在終端屏幕上生成懸浮按鈕;否則刪除終端屏幕上的懸浮按鈕。
通過分析可知,以上技術方案通過判斷屏幕是否處于“交互狀態”,來控制懸浮按鈕的顯示位置、生成或者刪除,其中“交互狀態”應該理解為當前屏幕獲得焦點,用戶可以進行操作,而智能終端在處于全屏狀態時也可以認為處于“交互狀態”,則此時會將懸浮按鈕“置于屏幕顯示范圍以內”,依然無法解決影響用戶使用體驗的問題。此外,通過判斷屏幕是否處于“交互狀態”來生成懸浮按鈕或者刪除懸浮按鈕,成本較高,需要窗口管理器(Windows Manager)不斷addView和removeView,頻繁申請和釋放系統資源,系統開銷增大,容易增加程序出錯的風險。
針對現有技術中智能終端處于全屏狀態下,懸浮按鈕影響用戶使用體驗的問題,并未找到有效的解決方案。
技術實現要素:
本發明提供一種智能終端的懸浮按鈕的控制方法及裝置,在監聽到顯示窗口由非全屏狀態切換到全屏狀態后,能夠智能化地控制懸浮按鈕進行隱藏,從而有效提升用戶的全屏使用體驗。
一方面,本發明提供一種智能終端的懸浮按鈕的控制方法,包括:
監聽智能終端顯示屏上的顯示窗口的高度;
在監聽到所述顯示窗口的高度發生變化后,判斷所述顯示窗口是否發生全屏狀態與非全屏狀態之間的切換;
在判斷所述顯示窗口發生全屏狀態與非全屏狀態之間的切換后,判斷所述顯示窗口是由非全屏狀態切換到全屏狀態,還是由全屏狀態切換到非全屏狀態;
在判斷所述顯示窗口由非全屏狀態切換到全屏狀態后,控制所述智能終端顯示屏上的懸浮按鈕進行隱藏;在判斷所述顯示窗口由全屏狀態切換到非全屏狀態后,控制所述智能終端顯示屏上的懸浮按鈕進行顯示。
優選的,在判斷所述顯示窗口由非全屏狀態切換到全屏狀態后,所述方法還包括:
判斷所述顯示窗口是否為首次由非全屏狀態到全屏狀態的切換;
在判斷所述顯示窗口為首次由非全屏狀態到全屏狀態的切換后,向用戶彈出對話框,以根據所述用戶對所述對話框中選項的選擇,確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏;
在判斷所述顯示窗口為非首次由非全屏狀態到全屏狀態的切換后,根據上次發生非全屏狀態到全屏狀態切換時,用戶對彈出的對話框中選項的選擇記錄,確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏,或者重新向用戶彈出對話框,以使所述用戶重新進行選擇。
優選的,所述對話框中包括以下多項內容:確定隱藏懸浮按鈕提示、隱藏懸浮按鈕的更改位置提示、允許選項、取消選項以及下次不再提醒選項;
所述確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏,包括:
判斷所述用戶是否在智能終端系統設置中將優先級別最高的允許懸浮按鈕隱藏選項關閉;在判斷所述用戶將所述允許懸浮按鈕隱藏選項關閉后,則無論用戶如何對所述對話框中的選項進行操作,始終保持所述懸浮按鈕顯示,不對所述智能終端顯示屏上的懸浮按鈕進行隱藏;
在判斷所述用戶未將所述允許懸浮按鈕隱藏選項關閉后,則:
在接收到所述用戶選擇取消選項后,繼續保持所述懸浮按鈕顯示,不對所述智能終端顯示屏上的懸浮按鈕進行隱藏;在接收到所述用戶選擇允許選項后,對所述懸浮按鈕進行隱藏;
在接收到所述用戶選擇取消選項或允許選項后,判斷所述用戶是否選擇下次不再提醒選項;在判斷所述用戶選擇下次不再提醒選項后,則執行與所述用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作持續有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,不再向用戶彈出對話框供用戶重新選擇;在判斷所述用戶未選擇下次不再提醒選項后,則執行與所述用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作對本次操作有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,重新向用戶彈出對話框供用戶重新選擇。
優選的,在監聽智能終端顯示屏上的顯示窗口的高度之前,所述方法還包括:
啟動服務進程,在所述服務進程內嵌的控件中創建懸浮按鈕;
創建顯示窗口監聽器,并將所述顯示窗口監聽器的高度設置為等于所述智能終端的顯示屏的高度、寬度設置為0,將所述顯示窗口監聽器的格式設置為透明,通過窗口管理器的添加視圖函數將所述窗口監聽器添加到所述智能終端顯示屏的顯示窗口中。
優選的,所述方法還包括:在將所述懸浮按鈕進行隱藏后,在信息通知欄中創建提醒所述懸浮按鈕隱藏以及點擊恢復的提醒信息,以使所述用戶在點擊所述提醒信息后,在所述智能終端的顯示屏上恢復所述懸浮按鈕的顯示。
另一方面,本發明提供一種智能終端的懸浮按鈕的控制裝置,包括:
監聽模塊,用于監聽智能終端顯示屏上的顯示窗口的高度;
第一判斷模塊,用于在所述監聽模塊監聽到所述顯示窗口的高度發生變化后,判斷所述顯示窗口是否發生全屏狀態與非全屏狀態之間的切換;
第二判斷模塊,用于在所述第一判斷模塊判斷所述顯示窗口發生全屏狀態與非全屏狀態之間的切換后,判斷所述顯示窗口是由非全屏狀態切換到全屏狀態,還是由全屏狀態切換到非全屏狀態;
控制模塊,用于在所述第二判斷模塊判斷所述顯示窗口由非全屏狀態切換到全屏狀態后,控制所述智能終端顯示屏上的懸浮按鈕進行隱藏,還用于在所述第二判斷模塊判斷所述顯示窗口由全屏狀態切換到非全屏狀態后,控制所述智能終端顯示屏上的懸浮按鈕進行顯示。
優選地,所述裝置還包括:
第三判斷模塊,用于在所述第二判斷模塊判斷所述顯示窗口由非全屏狀態切換到全屏狀態后,判斷所述顯示窗口是否為首次由非全屏狀態到全屏狀態的切換;
彈框模塊,用于在第三判斷模塊判斷所述顯示窗口為首次由非全屏狀態到全屏狀態的切換時,向用戶彈出對話框;
第一確定模塊,用于根據所述用戶對所述對話框中選項的選擇,確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏;
第二確定模塊,用于當所述第三判斷模塊判斷所述顯示窗口為非首次由非全屏狀態到全屏狀態的切換時,根據上次發生非全屏狀態到全屏狀態切換時,用戶對彈出的對話框中選項的選擇記錄,確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏,或者重新向用戶彈出對話框,以使所述用戶重新進行選擇。
優選地,所述對話框中包括以下多項內容:確定隱藏懸浮按鈕提示、隱藏懸浮按鈕的更改位置提示、允許選項、取消選項以及下次不再提醒選項;
所述第一確定模塊,包括:
第一判斷單元,用于判斷所述用戶是否在智能終端系統設置中將優先級別最高的允許懸浮按鈕隱藏選項關閉;
第一顯示及隱藏單元,用于在所述判斷單元判斷所述用戶將所述允許懸浮按鈕隱藏選項關閉后,無論用戶如何對所述對話框中的選項進行操作,始終保持所述懸浮按鈕顯示,不對所述智能終端顯示屏上的懸浮按鈕進行隱藏;
第二顯示及隱藏單元,用于在判斷所述用戶未將所述允許懸浮按鈕隱藏選項關閉后,且在接收到所述用戶選擇取消選項后,繼續保持所述懸浮按鈕顯示,不對所述智能終端顯示屏上的懸浮按鈕進行隱藏;還用于在判斷所述用戶未將所述允許懸浮按鈕隱藏選項關閉后,且在接收到所述用戶選擇允許選項后,對所述懸浮按鈕進行隱藏;
第二判斷單元,用于在接收到所述用戶選擇取消選項或允許選項后,判斷所述用戶是否選擇下次不再提醒選項;
執行單元,用于在所述第二判斷單元判斷所述用戶選擇下次不再提醒選項后,執行與所述用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作持續有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,不再向用戶彈出對話框供用戶重新選擇;還用于在所述第二判斷單元判斷所述用戶未選擇下次不再提醒選項后,執行與所述用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作對本次操作有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,重新向用戶彈出對話框供用戶重新選擇。
優選地,所述裝置還包括:
第一創建模塊,用于在監聽智能終端顯示屏上的顯示窗口的高度之前,啟動服務進程,并在所述服務進程內嵌的控件中創建懸浮按鈕;
第二創建模塊,用于創建顯示窗口監聽器,并將所述顯示窗口監聽器的高度設置為等于所述智能終端的顯示屏的高度、寬度設置為0,將所述顯示窗口監聽器的格式設置為透明,通過窗口管理器的添加視圖函數將所述窗口監聽器添加到所述智能終端顯示屏的顯示窗口中。
優選地,所述裝置還包括:
第三創建模塊,用于在將所述懸浮按鈕進行隱藏后,在信息通知欄中創建提醒所述懸浮按鈕隱藏以及點擊恢復的提醒信息,以使所述用戶在點擊所述提醒信息后,在所述智能終端的顯示屏上恢復所述懸浮按鈕的顯示。
本發明的其它特征和優點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發明而了解。本發明的目的和其他優點可通過在所寫的說明書、權利要求書、以及附圖中所特別指出的結構來實現和獲得。
下面通過附圖和實施例,對本發明的技術方案做進一步的詳細描述。
附圖說明
附圖用來提供對本發明的進一步理解,并且構成說明書的一部分,與本發明的實施例一起用于解釋本發明,并不構成對本發明的限制。在附圖中:
圖1為本發明實施例提供的一種智能終端的懸浮按鈕的控制方法的流程圖;
圖2為本發明實施例提供的一種智能終端的懸浮按鈕的控制裝置的框圖;
圖3為本發明實施例提供的一種懸浮按鈕的示意圖;
圖4為本發明實施例提供的一種對話框的示意圖;
圖5是本發明實施例提供的一種點擊恢復提醒信息的示意圖。
具體實施方式
以下結合附圖對本發明的優選實施例進行說明,應當理解,此處所描述的優選實施例僅用于說明和解釋本發明,并不用于限定本發明。
以下對本專利申請中使用的名詞或術語解釋如下:
懸浮按鈕:移動設備在開啟之后,屏幕當中出現一個圓形或者其它圖片形式的虛擬按鈕,它可以隨意拖動到屏幕上的任意位置,并且可以懸浮于大多數的應用界面之上。
Android:中文名稱為安卓,是一種基于Linux的自由及開放源代碼的操作系統,主要用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。
本發明實施例提供的一種智能終端的懸浮按鈕的控制方法,包括以下步驟S101-S104:
步驟S101:監聽智能終端顯示屏上的顯示窗口的高度;
步驟S102:在監聽到所述顯示窗口的高度發生變化后,判斷顯示窗口是否發生全屏狀態與非全屏狀態之間的切換;
步驟S103:在判斷顯示窗口發生全屏狀態與非全屏狀態之間的切換后,判斷顯示窗口是由非全屏狀態切換到全屏狀態,還是由全屏狀態切換到非全屏狀態;
步驟S104:在判斷顯示窗口由非全屏狀態切換到全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行隱藏;在判斷顯示窗口由全屏狀態切換到非全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行顯示。
在另外一個實施例中,如圖4所示,在判斷顯示窗口由非全屏狀態切換到全屏狀態后,上述智能終端的懸浮按鈕的控制方法,還包括:
步驟S1:判斷顯示窗口是否為首次由非全屏狀態到全屏狀態的切換;
步驟S2:在判斷顯示窗口為首次由非全屏狀態到全屏狀態的切換后,向用戶彈出對話框,以根據用戶對對話框中選項的選擇,確定是否對智能終端顯示屏上的懸浮按鈕進行隱藏;
步驟S3:在判斷顯示窗口為非首次由非全屏狀態到全屏狀態的切換后,根據上次發生非全屏狀態到全屏狀態切換時,用戶對彈出的對話框中選項的選擇記錄,確定是否對智能終端顯示屏上的懸浮按鈕進行隱藏,或者重新向用戶彈出對話框,以使用戶重新進行選擇。
在一個實施例中,上述對話框中可以包括以下多項內容:確定隱藏懸浮按鈕提示、隱藏懸浮按鈕的更改位置提示、允許選項、取消選項以及下次不再提醒選項;其中,上述確定是否對所述智能終端顯示屏上的懸浮按鈕進行隱藏,包括:
步驟S11:判斷用戶是否在智能終端系統設置中將優先級別最高的允許懸浮按鈕隱藏選項關閉;在判斷用戶將允許懸浮按鈕隱藏選項關閉后,則無論用戶如何對所述對話框中的選項進行操作,始終保持懸浮按鈕顯示,不對智能終端顯示屏上的懸浮按鈕進行隱藏;
步驟S12:在判斷用戶未將允許懸浮按鈕隱藏選項關閉后,則:
步驟S13:在接收到用戶選擇取消選項后,繼續保持懸浮按鈕顯示,不對智能終端顯示屏上的懸浮按鈕進行隱藏;在接收到用戶選擇允許選項后,對懸浮按鈕進行隱藏;
步驟S14:在接收到用戶選擇取消選項或允許選項后,判斷用戶是否選擇下次不再提醒選項;在判斷用戶選擇下次不再提醒選項后,則執行與用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作持續有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,不再向用戶彈出對話框供用戶重新選擇;在判斷用戶未選擇下次不再提醒選項后,則執行與用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作對本次操作有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,重新向用戶彈出對話框供用戶重新選擇。
在另外一個實施例中,在監聽智能終端顯示屏上的顯示窗口的高度之前,上述智能終端的懸浮按鈕的控制方法還包括:
步驟S22:啟動服務進程,在服務進程內嵌的控件中創建懸浮按鈕;
步驟S23:創建顯示窗口監聽器,并將顯示窗口監聽器的高度設置為等于智能終端的顯示屏的高度、寬度設置為0,將顯示窗口監聽器的格式設置為透明,通過窗口管理器的添加視圖函數將窗口監聽器添加到智能終端顯示屏的顯示窗口中。
在一個實施例中,如圖5所示,上述智能終端的懸浮按鈕的控制方法,還可以包括:在將懸浮按鈕進行隱藏后,在信息通知欄中創建提醒懸浮按鈕隱藏以及點擊恢復的提醒信息,以使用戶在點擊所述提醒信息后,在智能終端的顯示屏上恢復懸浮按鈕的顯示。
以下將對本發明實施例提供的智能終端的懸浮按鈕的控制方法的實現過程進行詳細說明如下:
通過懸浮按鈕所在的服務進程(Service進程)創建一個窗口監聽器,可以對窗口的高度進行監聽,一旦有變化就會做出響應。這個監聽器的父類其實是一個View,在其被創建后,會將其添加到窗口管理器中,使這個View高度等于屏幕高度,寬度等于0,這樣它是不能被用戶所看到,但是它可以監聽到窗口高度的變化。
在這個監聽器收到窗口變化時,會觸發其onSizeChanged方法,在其方法內部,判斷當前view的高度是否等于屏幕高度screenHeight,如果相等,說明由非全屏狀態變化到了全屏狀態;如果觸發onSizeChanged方法時,當前高度并不等于屏幕高度,則判斷一下當時是否進行了橫豎屏切換,即onConfigurationChanged方法有沒有觸發,如果沒有,并且保存的舊view高度等于屏幕高度,說明是由全屏狀態切換到了正常狀態,即非全屏狀態;
在view的監聽器中,如果確定全屏和非全屏狀態發生了切換,將通過Handler給Service進程發送消息,由Service進程進行消息處理。
這里將分幾種情況進行處理:
1、如果是第一次運行程序,將會首先創建一個對話框和用戶進行交互,提示是否對懸浮按鈕進行隱藏,如果未勾選“下次不再提示”,選擇了“取消”,懸浮按鈕將繼續顯示,不會隱藏;如果選擇了“允許”,本次將隱藏懸浮按鈕。如果勾選了“下次不再提示”,這時選擇了“取消”,以后將永遠不再隱藏懸浮按鈕,并且也不再提醒用戶;如選擇了“允許”,以后每次出現全屏情況時,都將立即隱藏懸浮按鈕,并且也不再提醒用戶。
2、如果不是第一次運行程序,之前彈出過圖4這樣的提示框,并且沒有勾選過“下次不再提示”,這次將會繼續彈出這個提示框。
3、如果之前操作勾選了“下次不再提示”,并且點擊了“允許”,將直接隱藏懸浮按鈕;
4、如果之前操作勾選了“下次不再提示”,并且點擊了“取消”,將繼續顯示懸浮按鈕,全屏切換對按鈕沒有影響;
5、如果將“全屏自動隱藏”開關關閉,則在客戶端進程中,無論屏幕如何切換,或者如何操作,都將繼續顯示懸浮按鈕。
在本實施例中,懸浮按鈕如果進行了隱藏,會發送一個通知到通知欄,在通知欄里有這樣一個條通知,如圖5所示,“xxx在這里,點擊返回屏幕”,如果此時點擊此條通知,會將懸浮按鈕顯示出來。
如果當前懸浮按鈕已經隱藏,并且由全屏切換到非全屏,此時懸浮按鈕將由通知欄中自動顯示到屏幕上,并且會將之前創建的通知取消掉。通過上述步驟,就實現了在屏幕切換全屏和非全屏時,懸浮按鈕的隱藏和顯示功能。
為實現上述目的,本發明提供了詳細的利用屏幕全屏和非全屏的變化,控制懸浮按鈕自動隱藏和顯示的方法,其實現步驟如下:
程序啟動:懸浮按鈕所在的應用在安裝后需要啟動才能運行。
啟動一個Service進程:我們使用一個Android Service來對懸浮按鈕進行管理和邏輯控制,并且將其放到一個單獨進程中,這是因為Service可以在后臺始終保持運行,具有不容易被殺死,不需要可視化界面支持的優點,并且在手機系統重啟后,還可以通過本地注冊的系統廣播消息,例如,手機啟動的廣播,網絡狀態變化的廣播,藍牙狀態變化,WiFi狀態變化等等,一般的系統類的廣播消息都可以將其啟動起來,生命力非常強,所以選擇Service作為實現懸浮按鈕的載體。
創建懸浮按鈕,按鈕進入待機狀態,監聽點擊事件:懸浮按鈕寄存在一個RelativeLayout控件之內,其自身是由一個ImageView控件實現的,利用系統WindowManager(窗口管理器)的addView方法添加到管理器中。通過設置其LayoutParams的type的屬性為WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,來實現懸浮于大多數應用窗口之上的。因為TYPE_SYSTEM_ALERT代表一個非常高的優先級,設置這個值,就可以使懸浮按鈕的優先級大于其他大部分窗口,在顯示時,自然就會處于其它窗口之上。同時給懸浮按鈕設置單擊,長按,雙擊,移動等的監聽事件,懸浮按鈕在收到不同的事件后,會進行不同的處理。如單擊懸浮按鈕,會打開懸浮窗,進行虛擬按鍵功能的使用,同時隱藏懸浮按鈕。
創建一個屏幕監聽器FloatMonitor:在Service進程中創建一個屏幕監聽器FloatMonitor,FloatMonitor的父類是一個View,我們在其創建時,將其高度height設置為屏幕的高度,寬度width設置為0,同時format設置為PixelFormat.TRANSPARENT,即透明的,這樣其對于用戶來說是不可見的,但是它卻可以監聽高度的變化,然后通過WindowManager的addView函數將其添加到當前活動窗口區中。
FloatMonitor進入待機狀態,監聽屏幕變化:在創建了屏幕窗口監聽器FloatMonitor后,需要重寫其onSizeChanged方法,在窗口高度有變化時,會回調到此方法中,這樣在其onSizeChanged方法中就可以根據之前保存的窗口值和現在的窗口高度值作比對,來判斷窗口是如何進行變化的。為了區分終端橫屏和豎屏的切換,同時需要重寫其onConfigurationChanged方法,這個方法在屏幕進行橫豎屏切換時會回調到此方法中。在此方法中,可以判斷和記錄當前是由橫屏轉成豎屏,還是豎屏轉成橫屏,這樣對于判斷屏幕全屏和非全屏的轉換起到輔助作用。
屏幕狀態發生變化,判斷屏幕是否由非全屏狀態切換到全屏狀態:屏幕狀態發生變化,會回調到onSizeChanged方法中,通過此方法參數中的h值與屏幕高度screenHeight作比較,如果相等,說明當前變化到了全屏狀態;如果這兩個值不相等,則認為是從全屏狀態退出到了非全屏狀態。
狀態未發生變化,繼續待機監聽;如果發生其他情況的變化,則進行其他功能邏輯處理:這里分兩種情況,一種是屏幕狀態未發生改變,將繼續保持FloatMonitor的監聽狀態;如果發生了變化,但不是從非全屏進入到全屏,如,兩種非全屏狀態的變化。典型例子如打開輸入法時和關閉輸入法時,這兩種狀態也會引起回調方法onSizeChanged的執行。此時我們會進行其它方面的邏輯處理,然后再次進入到屏幕監聽狀態。
FloatMonitor通過Handler發送消息給Service處理:收到窗口變化時,并不在FloatMonitor中處理消息,而是將其放到UI主線程中進行處理,我們可以通過FloatMonitor中的Handler發送自定義消息MSG_FULL_SCREEN_CHANGE給Service進行處理。因為涉及到UI操作,放到主線程中能保證流程的安全執行。而UI操作如果放到子線程中運行將會導致程序崩潰。
Service收到消息,在UI主線程進行處理:Service在收到MSG_FULL_SCREEN_CHANGE消息后,會根據消息帶的參數,來選擇不同程序分支進行執行。
判斷全屏隱藏的開關是否為打開狀態:在執行功能前,首先使用isFullScreenHideEnable方法判斷全屏隱藏的開關是否打開了,因為此功能由一個開關進行控制,用戶可以在應用程序中進行設置,如果開關關閉說明此應用不起作用,此時可以對隱藏不予響應;如果開關為開,可以繼續向下執行程序。
全屏隱藏功能關閉,繼續進行監聽:全屏隱藏功能開關如果關閉,說明用戶不希望在全屏時隱藏懸浮按鈕,因此此時將直接返回到FloatMonitor繼續監聽屏幕狀態,因為后續用戶可能會將此開關重新打開。懸浮按鈕保持顯示狀態。
判斷“下次不再提示”標志值是否為true:全屏隱藏功能開關為打開,則需要判斷“下次不再提示”標志值no_hint_forever是否為true,在程序第一次啟動,默認狀態是false的,即在彈出提示框時,默認是不勾選“下次不再提示”的,需要用戶自己根據需要進行選擇。
說明不是首次操作,選擇隱藏懸浮按鈕:“下次不再提示”標志值no_hint_forever為true,說明之前彈出提示框后,用戶勾選了“下次不再提示”復選框,將會直接隱藏懸浮按鈕。
創建并彈出選擇提示框:“下次不再提示”標志值no_hint_forever為false,說明上次未勾選“下次不再提示”復選框,或者首次運行程序,這時需要創建并彈出提示框。
提示框內容包括一個復選框“下次不再提示”,兩個按鈕,“取消”和“允許”:提示款是一個普通的Android提示框,如圖3所示,有標題,描述,和一個“下次不再提示”的復選框,以及兩個按鈕,“取消”和“允許”。
如果選擇復選框“下次不再提示”,將其標志置為true,否則為false:選擇復選框,程序會將標志no_hint_forever置為true,表示后續不要再彈出此框了;去掉選擇或者不選擇復選框,則會將標志no_hint_forever置為false,表示后續在收到全屏變化的消息后還要再次彈出此框。
判斷提示框點擊的是“取消”,還是“允許”:用戶需要點擊取消,或者允許才能關閉此提示框,選擇“取消”表示不隱藏懸浮按鈕;選擇“允許”表示隱藏懸浮按鈕。
懸浮按鈕不隱藏,FloatMonitor繼續進行監聽:點擊取消后,將不隱藏懸浮按鈕,程序進入繼續監聽狀態,懸浮按鈕繼續顯示,等待按鍵事件的處理。
點擊允許,選擇隱藏懸浮按鈕:點擊允許,說明用戶希望隱藏懸浮按鈕,將進入到隱藏流程。
創建并發送通知Notification,立即隱藏懸浮按鈕:在隱藏懸浮按鈕流程中,首先會創建一個通知消息Notification,并將其發送到通知欄。通知創建完畢后,則使用setVisibility(View.GONE)方法將懸浮按鈕進行隱藏;
懸浮按鈕隱藏,同時在通知欄給出點擊還原的提示信息:此時懸浮按鈕進入隱藏狀態,展開通知欄會看到一條通知,顯示懸浮按鈕已經隱藏,點擊此條通知可以進行還原。但是Service進程沒有關閉,會繼續進行運行,同時監聽屏幕變化的監聽器FloatMonitor也會繼續工作,如監聽屏幕是否從全屏又變化到了非全屏等。
以上是由非全屏狀態變化到全屏狀態時,懸浮按鈕的隱藏處理流程,下面說一下由全屏狀態變化到非全屏狀態,懸浮按鈕的顯示處理流程,詳細的步驟如下所示:
懸浮按鈕隱藏:懸浮按鈕處于隱藏狀態。
FloatMonitor處于待機狀態,監聽屏幕變化:監聽屏幕變化:在其回調onSizeChanged方法中處理屏幕變化的消息。一旦有屏幕發生變化,將回調到onSizeChanged方法中。
屏幕狀態發生變化,判斷屏幕是否由全屏狀態切換到非全屏狀態:屏幕狀態發生變化,會回調到onSizeChanged方法中,通過此方法參數中的h值與屏幕高度screenHeight作比較,如果這兩個值不相等,則認為是從全屏狀態退出到了非全屏狀態。在此過程中需要將橫豎屏切換的情況排除掉,可以利用onConfigurationChanged方法是否被回調來進行區分。
狀態未發生變化,繼續待機監聽;如果發生其它情況的變化,則進行其它方方面的功能邏輯處理:這里分兩種情況,一種是屏幕狀態未發生改變,將繼續保持FloatMonitor的監聽狀態;如果發生了變化,但不是從全屏進入到非全屏,如,兩種非全屏的狀態的變化。典型例子如打開輸入法時和關閉輸入法時,這兩種狀態也會引起回調方法onSizeChanged的執行。此時我們會進行其他邏輯的處理,然后再次進入到屏幕監聽狀態。
FloatMonitor通過Handler發送消息給Service處理:收到窗口變化時,并不在FloatMonitor中處理消息,而是將其放到UI主線程中進行處理,我們可以通過在FloatMonitor中的Handler發送消息MSG_FULL_SCREEN_CHANGE給Service進行處理。因為涉及到操作UI,放到主線程中能保證流程的正確執行。
Service收到消息,在UI主線程進行處理:Service在收到MSG_FULL_SCREEN_CHANGE消息后,會根據消息帶的參數,來選擇不同程序分支進行執行。
判斷懸浮按鈕是否是由窗口變化隱藏的:判斷當前的懸浮按鈕隱藏原因是否是由窗口變化引起的,因為懸浮按鈕隱藏并不是只有此一種方式,還可以通過手動長按懸浮按鈕或者其它方式來實現隱藏。
可能是其他原因引起的懸浮按鈕隱藏,此時需要繼續進入監聽狀態,處理其他窗口變化邏輯:如果是其他原因導致的懸浮按鈕隱藏,此時將不對其進行處理,不會將其顯示出來。繼續進入到待機監聽狀態。
顯示懸浮按鈕,同時取消掉通知欄中的通知:如果判斷是通過窗口變化隱藏的懸浮按鈕,此時將會調用setVisibility(View.VISIBLE)方法將懸浮按鈕顯示出來,同時將通知欄中的通知取消掉。
懸浮按鈕顯示:懸浮按鈕進入顯示狀態,開始監聽按鍵事件,響應用戶的輸入。
在懸浮按鈕隱藏到通知欄后,除了通過窗口變化將其重新顯示以外,還可以通過手動的方式,將其顯示出來,具體實現步驟如下:
懸浮按鈕處于隱藏狀態,Service進程繼續后臺運行(也即,程序依然活著),只是懸浮按鈕臨時進行了隱藏,可以通過點擊此通知可以將懸浮按鈕進行顯示。判斷用戶是否手動點擊了此通知,如果未點擊通知,懸浮按鈕將一直保持隱藏,進入到Service待機狀態;如果用戶點擊通知,我們并不判斷之前是由于何種原因進行了隱藏,點擊通知,將會觸發懸浮按鈕進行顯示,同時清除通知欄中的此條通知,懸浮按鈕進入顯示狀態,開始監聽按鍵事件,響應用戶的輸入。
本發明實施例提供的智能終端的懸浮按鈕的控制方法,通過監聽智能終端顯示屏上的顯示窗口的高度;在監聽到顯示窗口的高度發生變化后,判斷顯示窗口是否發生全屏狀態與非全屏狀態之間的切換;在判斷顯示窗口發生全屏狀態與非全屏狀態之間的切換后,判斷顯示窗口是由非全屏狀態切換到全屏狀態,還是由全屏狀態切換到非全屏狀態;在判斷顯示窗口由非全屏狀態切換到全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行隱藏;在判斷顯示窗口由全屏狀態切換到非全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行顯示。該方法在監聽到顯示窗口由非全屏狀態切換到全屏狀態后,能夠智能化地控制懸浮按鈕進行隱藏,從而有效提升用戶的全屏使用體驗,智能化程度高,且不消耗內存及電量資源。
本發明實施例另外提供一種智能終端的懸浮按鈕的控制裝置,如圖2所示,包括:
監聽模塊201,用于監聽智能終端顯示屏上的顯示窗口的高度;
第一判斷模塊202,用于在監聽模塊201監聽到顯示窗口的高度發生變化后,判斷顯示窗口是否發生全屏狀態與非全屏狀態之間的切換;
第二判斷模塊203,用于在第一判斷模塊202判斷顯示窗口發生全屏狀態與非全屏狀態之間的切換后,判斷顯示窗口是由非全屏狀態切換到全屏狀態,還是由全屏狀態切換到非全屏狀態;
控制模塊204,用于在第二判斷模塊203判斷顯示窗口由非全屏狀態切換到全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行隱藏,還用于在第二判斷模塊203判斷顯示窗口由全屏狀態切換到非全屏狀態后,控制智能終端顯示屏上的懸浮按鈕進行顯示。
在另外一個實施例中,上述智能終端的懸浮按鈕的控制裝置,還包括:
第三判斷模塊,用于在第二判斷模塊203判斷顯示窗口由非全屏狀態切換到全屏狀態后,判斷顯示窗口是否為首次由非全屏狀態到全屏狀態的切換;
彈框模塊,用于在第三判斷模塊判斷顯示窗口為首次由非全屏狀態到全屏狀態的切換時,向用戶彈出對話框;
第一確定模塊,用于根據用戶對對話框中選項的選擇,確定是否對智能終端顯示屏上的懸浮按鈕進行隱藏;
第二確定模塊,用于當第三判斷模塊判斷顯示窗口為非首次由非全屏狀態到全屏狀態的切換時,根據上次發生非全屏狀態到全屏狀態切換時,用戶對彈出的對話框中選項的選擇記錄,確定是否對智能終端顯示屏上的懸浮按鈕進行隱藏,或者重新向用戶彈出對話框,以使用戶重新進行選擇。
在本發明提供的另外一個實施例中,向用戶彈出的話框中可以包括以下多項內容:確定隱藏懸浮按鈕提示、隱藏懸浮按鈕的更改位置提示、允許選項、取消選項以及下次不再提醒選項;其中,上述第一確定模塊,包括:
第一判斷單元,用于判斷用戶是否在智能終端系統設置中將優先級別最高的允許懸浮按鈕隱藏選項關閉;
第一顯示及隱藏單元,用于在判斷單元判斷用戶將允許懸浮按鈕隱藏選項關閉后,無論用戶如何對對話框中的選項進行操作,始終保持懸浮按鈕顯示,不對智能終端顯示屏上的懸浮按鈕進行隱藏;
第二顯示及隱藏單元,用于在判斷用戶未將允許懸浮按鈕隱藏選項關閉后,且在接收到用戶選擇取消選項后,繼續保持懸浮按鈕顯示,不對智能終端顯示屏上的懸浮按鈕進行隱藏;還用于在判斷用戶未將允許懸浮按鈕隱藏選項關閉后,且在接收到用戶選擇允許選項后,對懸浮按鈕進行隱藏;
第二判斷單元,用于在接收到用戶選擇取消選項或允許選項后,判斷用戶是否選擇下次不再提醒選項;
執行單元,用于在第二判斷單元判斷用戶選擇下次不再提醒選項后,執行與用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作持續有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,不再向用戶彈出對話框供用戶重新選擇;還用于在第二判斷單元判斷用戶未選擇下次不再提醒選項后,執行與用戶選擇的取消選項或允許選項對應的顯示或者隱藏操作對本次操作有效,且在后續發生顯示窗口由非全屏狀態到全屏狀態的切換時,重新向用戶彈出對話框供用戶重新選擇。
上述智能終端的懸浮按鈕的控制裝置,還包括:
第一創建模塊,用于在監聽智能終端顯示屏上的顯示窗口的高度之前,啟動服務進程,并在服務進程內嵌的控件中創建懸浮按鈕;
第二創建模塊,用于創建顯示窗口監聽器,并將顯示窗口監聽器的高度設置為等于智能終端的顯示屏的高度、寬度設置為0,將顯示窗口監聽器的格式設置為透明,通過窗口管理器的添加視圖函數將窗口監聽器添加到智能終端顯示屏的顯示窗口中。
在另外一個實施例中,上述智能終端的懸浮按鈕的控制裝置,還包括:
第三創建模塊,用于在將懸浮按鈕進行隱藏后,在信息通知欄中創建提醒懸浮按鈕隱藏以及點擊恢復的提醒信息,以使用戶在點擊所述提醒信息后,在智能終端的顯示屏上恢復所述懸浮按鈕的顯示。
本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或計算機程序產品。因此,本發明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產品的形式。
本發明是參照根據本發明實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和范圍。這樣,倘若本發明的這些修改和變型屬于本發明權利要求及其等同技術的范圍之內,則本發明也意圖包含這些改動和變型在內。