Android應用程序如何識別當前設備是筆記本模式or平板模式

支持兩種模式Laptop Mode與Pad Mode(筆記模式、平板模式)的ChromeOS Android

  • ChromeOS中Android與Chrome之間雖然是以mojo作爲通信手段,但是對平板模式切換到筆記本模式的處理,卻不是mojo來做通信的
  • 當ChromeOS切換筆記模式、平板模式的時候,是通過wayland來進行通信的

當模式切換時,Chrome通過wayland與Android通信

  • Chrome通過wayland與Android HWComposer通信,由HWComposer將Android的畫面進行縮放轉換
  • 然後通過jni網往上調用到FrameWork。其中,FrameWork中的InputManager調用OnTabletModeChanged方法,通過調用oberser的觀察者方法來通知各個觀察者模式發生了切換。
  • OnTabletModeChanged的回調註冊方法registerOnTabletModeChangedListener雖然是public的,但是它被聲明爲@hide,即這個方法不能被應用層調用,只能被FrameWork層才能使用。
  • 應用層可能需要通過反射InputManager並搜索回調註冊方法來實現觀察,完成回調調用。

曲線救國

  • 無法在應用層添加觀察者,那麼可以考慮其它方案:
    getResources().getConfiguration()可以獲取screenWidthDpscreenHeightDp,在筆記本於筆記模式和平板模式之間切換的時候,像素密度可能會發生對應的修改,這時有機會去識別當前的狀態。

實際上,應用層採用相對佈局、自適應佈局來實現UI,在不同尺寸做到自動適應,實際上就不需要花這麼大力氣去適配不同尺寸的屏幕或筆記模式、窗口模式了。對於筆記模式和平板模式帶來的顯示上的差異,由底層的wayland/HWComposer和Framework去完成就行了,應用層按照兼容性思想來做,也不需要遇上一些複雜帶坑的適配問題。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章