2014-03-31 57 views
0

這是我一直在努力的一段時間。很多中國的Android製造商製造出使用帶鍵盤控制的遙控器控制的Android TV盒。檢測Android設備是否使用導航控件

我正在尋找一種確定的方式來檢測設備是否使用導航控件或者實際上是否使用觸摸屏輸入。某些設備也可能將鼠標輸入模擬爲觸摸屏輸入,所以它有點棘手。

任何想法?

回答

1

基於Jozua的回答,我創建了可以被用來確定一個設備使用導航控制從許多因素這種簡單的方法。代碼是以一種試圖儘早失敗的方式編寫的。

/** 
* Determines if the device uses navigation controls as the primary navigation from a number of factors. 
* @param context Application Context 
* @return True if the device uses navigation controls, false otherwise. 
*/ 
public static boolean usesNavigationControl(Context context) { 
    Configuration configuration = context.getResources().getConfiguration(); 
    if (configuration.navigation == Configuration.NAVIGATION_NONAV) { 
     return false; 
    } else if (configuration.touchscreen == Configuration.TOUCHSCREEN_FINGER) { 
     return false; 
    } else if (configuration.navigation == Configuration.NAVIGATION_DPAD) { 
     return true; 
    } else if (configuration.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH) { 
     return true; 
    } else if (configuration.touchscreen == Configuration.TOUCHSCREEN_UNDEFINED) { 
     return true; 
    } else if (configuration.navigationHidden == Configuration.NAVIGATIONHIDDEN_YES) { 
     return true; 
    } else if (configuration.uiMode == Configuration.UI_MODE_TYPE_TELEVISION) { 
     return true; 
    } 
    return false; 
} 

我已經在衆多手機,平板電腦,模擬器配置和Google TV上測試過這個功能。許多設備使用遙控器和USB鼠標進行控制。我尚未測試它是否按預期在此類設備上工作。

2

請在以下文章瞭解輸入控件:

要看到,在運行時是什麼類型的導航的用戶可用,使用Configuration類。

Configuration configuration = context.getResources().getConfiguration(); 
if (Configuration.NAVIGATION_NONAV == configuration.navigation) { 
    // Device has no navigation facility other than using the touchscreen. 
} else if (Configuration.NAVIGATION_DPAD == configuration.navigation) { 
    // Device has a directional-pad (d-pad) for navigation. 
} else if (Configuration.NAVIGATION_TRACKBALL == configuration.navigation) { 
    // Device has a trackball for navigation. 
} // ... etc 
+0

謝謝!不能相信我忘了配置類:-)我發佈了另一個工作代碼的答案,考慮到一些案件。 –