一種切換導航欄的方法及裝置與流程
2023-10-09 19:55:24 5

本發明屬於數據處理技術領域,尤其涉及一種切換導航欄的方法及裝置。
背景技術:
在android電視應用中,很多時候app都會有導航欄,有時可能還是兩三級導航欄聯動效果,在導航欄切換過程中,需要重新請求該導航欄目下的內容,才可以實現切換。
一般來說,android電視/盒子都是利用遙控器控制切換,在切換時,如果一直按著遙控器不動,就會控制焦點不停的切換,導航欄就會頻繁的刷新請求數據,若有多級導航欄聯動,刷新請求數據的操作將會成幾何方式增長,這樣就導致用戶的操作效率低,體驗度不高。
技術實現要素:
針對現有技術存在的問題,本發明實施例提供了一種切換導航欄的方法及裝置,用於解決現有技術中在快速切換android電視或android盒子上的導航欄時,導航欄就會頻繁的刷新請求數據導致用戶操作效率降低的技術問題。
本發明提供一種切換導航欄的方法,所述方法包括:
接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲;
接收與所述當前按鍵事件消息對應的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換。
上述方案中,若所述時間間隔不大於所述預設的延遲時間,還包括:
刪除所述當前按鍵事件消息,根據所述下次按鍵事件消息對所述導航欄進行切換。
上述方案中,所述根據所述當前按鍵事件消息對所述導航欄進行切換之前,還包括:
判斷所述當前按鍵事件消息的第一輸入方向與所述下次按鍵事件消息的第二輸入方向是否一致,若一致,則根據所述當前按鍵事件消息對所述導航欄進行切換。
上述方案中,所述若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換,包括:
標記待處理消息的名稱;
判斷所述當前按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,調用onitemselectlistener.onitemposselect函數將所述當前按鍵事件消息分發至主線程的處理頁面中,利用所述主線程對所述當前待處理消息進行處理。
上述方案中,所述刪除所述當前按鍵事件消息,根據所述下次按鍵事件消息對所述導航欄進行切換,包括:
利用handler刪除所述主線程消息隊列中的當前按鍵事件消息;
判斷所述下次按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,利用handler.obtainmessage(0)函數獲取所述下次按鍵事件消息;
利用handler將所述下次按鍵事件消息發送至主線程處理頁面中;
利用所述主線程對所述下次按鍵事件消息進行處理。
本發明還提供一種切換導航欄的裝置,所述裝置包括:
延遲單元,用於接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲;
判斷單元,用於接收與所述當前按鍵事件消息對應的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換。
上述方案中,所述裝置還包括:判斷單元還用於:
若所述時間間隔不大於所述預設的延遲時間,刪除所述當前按鍵事件消息,根據所述下次按鍵事件消息對所述導航欄進行切換。
上述方案中,所述判斷單元還用於:
根據所述當前按鍵事件消息對所述導航欄進行切換之前,判斷所述當前按鍵事件消息的第一輸入方向與所述下次按鍵事件消息的第二輸入方向是否一致,若一致,則根據所述當前按鍵事件消息對所述導航欄進行切換。
上述方案中,所述判斷單元具體用於:
標記待處理消息的名稱;
判斷所述當前按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,調用onitemselectlistener.onitemposselect函數將所述當前按鍵事件消息分發至主線程的處理頁面中,利用所述主線程對所述當前待處理消息進行處理。
上述方案中,所述判斷單元具體還用於:
利用handler刪除所述主線程消息隊列中的當前按鍵事件消息;
判斷所述下次按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,利用handler.obtainmessage(0)函數獲取所述下次按鍵事件消息;
利用handler將所述下次按鍵事件消息發送至主線程的處理頁面中;
利用所述主線程對所述下次按鍵事件消息進行處理。
本發明提供了一種切換導航欄的方法及裝置,所述方法包括:接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲;接收當前與按鍵事件消息對應的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換;如此,接收到當前按鍵事件消息後,會按照預設的延遲時間將當前按鍵事件消息進行延遲,當用戶繼續按下遙控器切換導航欄目時,接收到下次按鍵事件消息,只有兩次事件消息的時間間隔大於預設的延遲時間後,才會將當前按鍵事件消息分發至處理頁面進行處理,從而能根據所述當前按鍵事件消息對所述導航欄進行切換;這樣利用消息延遲機制來優化數據請求,降低了數據請求的刷新次數,進而提高了用戶的操作效率。
附圖說明
圖1為本發明實施例一提供的切換導航欄方法流程示意圖;
圖2為本發明實施例二提供的切換導航欄裝置結構示意圖。
具體實施方式
為了在切換導航欄時可以提高用戶的操作效率,本發明提供了一種切換導航欄的方法及裝置,所述方法包括:接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲;接收與當前按鍵事件消息對應的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換。
下面通過附圖及具體實施例對本發明的技術方案做進一步的詳細說明。
實施例一
本實施例提供一種切換導航欄的方法,如圖1所示,所述方法包括:
s101,接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲。
本步驟中,當用戶需通過切換安卓tv或安卓盒子的導航欄來觀看不同的電視節目時,一般是利用遙控器輸入按鍵事件消息來切換導航欄,那麼伺服器就會接收遙控器發送的當前按鍵事件消息,並對當前按鍵事件消息進行監聽來獲取遙控器的第一輸入方向。所述按鍵事件一般是指遙控器的onkey事件。
具體地,對當前按鍵事件消息進行監聽來獲取遙控器的輸入方向包括:獲取當前按鍵事件消息的第一keyevent事件消息,利用所述第一keyevent事件消息的第一鍵碼值來確定當前按鍵事件消息的第一輸入方向。
這裡,為了避免用戶在同樣的輸入方向進行頻繁操作(比如第一次的輸入方向為下,第二次輸入方向還為下),導致導航欄切換的數據請求被頻繁刷新,所以在接收到當前按鍵事件消息後,將按照預設的延遲時間對所述當前按鍵事件消息進行延遲。一般來說,預設的延遲時間可以包括300~400ms,具體的延遲時間可以根據伺服器的性能進行確定,本實施例中延遲時間為300ms。
s102,接收當前按鍵事件消息的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換。
本步驟中,當用戶利用遙控器輸入當前按鍵事件消息的下次按鍵事件消息後,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,說明當前按鍵事件消息是用戶的需求,則利用回調函數將當前按鍵事件消息分發至處理頁面,根據所述當前按鍵事件消息對所述導航欄進行切換。
具體地,在利用回調函數將當前按鍵事件消息分發至處理頁面,根據所述當前按鍵事件消息對所述導航欄進行切換時,首先定義所述回調函數的接口onitemselectlistener,並在接口中定義回調函數onitemposselect。
然後標記待處理消息的名稱,比如待處理消息為message.what=0的消息。
在定義好回調函數的接口及回調函數後,定義消息處理函數handler,然後判斷所述當前按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,消息隊列messagequeue會把前按鍵事件消息分發給handler,所述handler就會處理消息調用函數handlemessage,即通過調用onitemselectlistener.onitemposselect函數將所述當前按鍵事件消息分發至主線程的處理頁面中,利用所述主線程對所述當前待處理消息進行處理,處理完畢後,即能實現導航欄的切換。
這裡,若所述時間間隔不大於所述預設的延遲時間,說明消息隊列messagequeue還未將當前按鍵事件消息分發至主線程的處理頁面中,此時將刪除所述當前按鍵事件,根據所述下次按鍵事件消息對所述導航欄進行切換。
所述刪除所述當前按鍵事件,根據所述下次按鍵事件消息對所述導航欄進行切換,具體包括:
利用handler刪除所述主線程消息隊列中的當前按鍵事件消息;判斷所述下次按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,利用handler.obtainmessage(0)函數獲取所述下次按鍵事件消息;利用handler將所述下次按鍵事件消息發送至主線程處理頁面中;利用所述主線程對所述下次按鍵事件消息進行處理,處理完畢後,即能實現導航欄的切換。
當然,在獲取到下次按鍵事件消息後,也是需要按照預設的延遲時間利用函數handler.sendmessagedelayed(message,300)將下次待處理消息進行延遲,如此不斷地進行循環處理。這樣,當用戶按下遙控器切換導航欄目時,通過handler延遲300ms發送事件消息message,也就是說handler把消息message發送到了消息隊列messagequeue,messagequeue會阻塞300ms才分發消息出去,這樣用戶在快速輸入相同方向的兩次按鍵時,避免了頻繁請求數據,優化了數據請求。實際應用中,比如,預設的延遲時間為200ms,如果用戶每隔500ms按一次鍵的話,當用戶按下兩次鍵時,本實施例提供的方法中,只向伺服器發送一次數據請求;但是按照現有的方法來實施的話,每一次按鍵都需要向伺服器發送數據請求,這樣就增加了伺服器的處理頻率,降低了伺服器的處理效率,導致用戶的操作效率低。
這裡,因本實施例提供的方法是基於遙控案器發送的兩次按鍵事件消息是輸入同方向來說的,所以在根據所述當前按鍵事件消息對所述導航欄進行切換之前,還包括:判斷所述當前按鍵事件消息的第一輸入方向與所述下次按鍵事件消息的第二輸入方向是否一致,若一致,則根據所述當前按鍵事件消息對所述導航欄進行切換。
同樣地,判斷下次按鍵事件消息的第二輸入方向與判斷當前按鍵事件消息的第一輸入方向的方法相同,具體地,獲取下次按鍵事件消息的第二keyevent事件消息,利用所述第二keyevent事件消息的第二鍵碼值來確定下次按鍵事件消息的第二輸入方向。
實施例二
相應於實施例一,本實施例提供一種切換導航欄的裝置,如圖2所示,所述裝置包括:延遲單元21及判斷單元22;其中,
當用戶需通過切換安卓tv或安卓盒子的導航欄來觀看不同的電視節目時,一般是利用遙控器輸入按鍵事件消息來切換導航欄,那麼延遲單元21就會接收遙控器發送的當前按鍵事件消息,並對當前按鍵事件消息進行監聽來獲取遙控器的第一輸入方向。所述按鍵事件一般是指遙控器的onkey事件。
具體地,延遲單元21對當前按鍵事件消息進行監聽來獲取遙控器的輸入方向包括:獲取當前按鍵事件消息的第一keyevent事件消息,利用所述第一keyevent事件消息的第一鍵碼值來確定當前按鍵事件消息的第一輸入方向。
這裡,為了避免用戶在同樣的輸入方向進行頻繁操作(比如第一次的輸入方向為下,第二次輸入方向還為下),導致導航欄切換的數據請求被頻繁刷新,所以延遲單元21在接收到當前按鍵事件消息後,將按照預設的延遲時間對所述當前按鍵事件消息進行延遲。一般來說,預設的延遲時間可以包括300~400ms,具體的延遲時間可以根據伺服器的性能進行確定,本實施例中延遲時間為300ms。
當用戶利用遙控器輸入當前按鍵事件消息的下次按鍵事件消息後,所述判斷單元22用於判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,說明當前按鍵事件消息是用戶的需求,則利用回調函數將當前按鍵事件消息分發至處理頁面,根據所述當前按鍵事件消息對所述導航欄進行切換。
具體地,判斷單元22在利用回調函數將當前按鍵事件消息分發至處理頁面,根據所述當前按鍵事件消息對所述導航欄進行切換時,首先定義所述回調函數的接口onitemselectlistener,並在接口中定義回調函數onitemposselect。
然後標記待處理消息的名稱,比如待處理消息為message.what=0的消息。
在定義好回調函數的接口及回調函數後,定義消息處理函數handler,然後判斷所述當前按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,消息隊列messagequeue會把前按鍵事件消息分發給handler,所述handler就會處理消息調用函數handlemessage,即通過調用onitemselectlistener.onitemposselect函數將所述當前按鍵事件消息分發至主線程的處理頁面中,利用所述主線程對所述當前待處理消息進行處理,處理完畢後,即能實現導航欄的切換。
這裡,若判斷單元22判斷所述時間間隔不大於所述預設的延遲時間,說明消息隊列messagequeue還未將當前按鍵事件消息分發至主線程的處理頁面中,此時將刪除所述當前按鍵事件,根據所述下次按鍵事件消息對所述導航欄進行切換。
所述判斷單元22所述刪除所述當前按鍵事件,根據所述下次按鍵事件消息對所述導航欄進行切換,具體包括:
利用handler刪除所述主線程消息隊列中的當前按鍵事件消息;所述判斷單元22還用於判斷所述下次按鍵事件消息的名稱與所述待處理消息的名稱是否一致,若一致,利用handler.obtainmessage(0)函數獲取所述下次按鍵事件消息;利用handler將所述下次按鍵事件消息發送至主線程處理頁面中;利用所述主線程對所述下次按鍵事件消息進行處理,處理完畢後,即能實現導航欄的切換。
當然,所述延遲單元21在獲取到下次按鍵事件消息後,也是需要按照預設的延遲時間利用函數handler.sendmessagedelayed(message,300)將下次待處理消息進行延遲,如此不斷地進行循環處理。這樣,當用戶按下遙控器切換導航欄目時,通過handler延遲300ms發送事件消息message,也就是說handler把消息message發送到了消息隊列messagequeue,messagequeue會阻塞300ms才分發消息出去,這樣用戶在快速輸入相同方向的兩次按鍵時,避免了頻繁請求數據,優化了數據請求。實際應用中,比如,預設的延遲時間為200ms,如果用戶每隔500ms按一次鍵的話,當用戶按下兩次鍵時,本實施例提供的方法中,只向伺服器發送一次數據請求;但是按照現有的方法來實施的話,每一次按鍵都需要向伺服器發送數據請求,這樣就增加了伺服器的處理頻率,降低了伺服器的處理效率,導致用戶的操作效率低。
這裡,因本實施例提供的方法是基於遙控案器發送的兩次按鍵事件消息是輸入同方向來說的,所以在根據所述當前按鍵事件消息對所述導航欄進行切換之前,所述判斷單元22還用於:判斷所述當前按鍵事件消息的第一輸入方向與所述下次按鍵事件消息的第二輸入方向是否一致,若一致,則根據所述當前按鍵事件消息對所述導航欄進行切換。
同樣地,所述判斷單元22判斷下次按鍵事件消息的第二輸入方向與判斷當前按鍵事件消息的第一輸入方向的方法相同,具體地,獲取下次按鍵事件消息的第二keyevent事件消息,利用所述第二keyevent事件消息的第二鍵碼值來確定下次按鍵事件消息的第二輸入方向。
本發明實施例提供的切換導航欄的方法及裝置能帶來的有益效果至少是:
本發明提供了一種切換導航欄的方法及裝置,所述方法包括:接收遙控器發送的當前按鍵事件消息,並按照預設的延遲時間對所述當前按鍵事件消息進行延遲;接收與當前按鍵事件消息對應的下次按鍵事件消息,判斷所述下次按鍵事件消息與所述當前按鍵事件消息之間的時間間隔是否大於所述預設的延遲時間,若所述時間間隔大於所述預設的延遲時間,則根據所述當前按鍵事件消息對所述導航欄進行切換;如此,接收到當前按鍵事件消息後,會按照預設的延遲時間將當前按鍵事件消息進行延遲,當用戶繼續按下遙控器切換導航欄目時,接收到下次按鍵事件消息,只有兩次事件消息的時間間隔大於預設的延遲時間後,才會將當前按鍵事件消息分發至處理頁面進行處理,在不大於預設的延遲時間時,則將當前按鍵事件消息刪除,根據下次按鍵事件消息對所述導航欄進行切換,這樣利用消息延遲機制來優化數據請求,降低了數據請求的刷新次數,進而提高了用戶的操作效率。
以上所述,僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護範圍之內。