UPDATE:確実4Kデバイスを検出する唯一の方法を
:これはExoPlayer 1.5.1で修正されました(https://github.com/google/ExoPlayer/commit/79055066813123c939c29e5a5e223a5ff043b91eを参照)
私はExoPlayerの開発者にフォローアップし、答えを見つけましたDevice.Mode
を使用していますが、これはAPIレベル23+でのみ利用可能です。それは、このコードを実装していませんExoPlayer
については、現在のバージョンのように、
https://developer.android.com/reference/android/view/Display.Mode.html#getPhysicalWidth()
:
https://developer.android.com/preview/api-overview.html#4K-display
そして、ここでクラスのドキュメント:ここでその上のAndroid Mノートを参照してください。 (1.4.2)しかしそれはおそらく変わるでしょう。参照:
https://github.com/google/ExoPlayer/issues/800
そして最後の質問に答えるために、今4Kを検出するための正しい方法は次のようなものです:
少ない23
よりもAPIに誤った結果が得られます
/**
* Used to check if the connected device support UHD (3840x2160)
*
* Note that this call will fail to identify UHD devices on api level bellow 23 (M)
*
* @return 1 if device is UHD, 0 otherwise
*/
public int isUHD(){
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point displaySize = getDisplaySize(display);
return (displaySize.x >= 3840 && displaySize.y >= 2160) ? 1 : 0;
}
/**
* Convenience function that forks to the different ways to obatin the Display size across Android versions
*
* @param display Display instance to obtain information from
*
* @return Point a Point describing the Display size
*/
private static Point getDisplaySize(Display display) {
Point displaySize = new Point();
if(Util.SDK_INT >= 23){
getDisplaySizeV23(display, displaySize);
}else if(Util.SDK_INT >= 17) {
getDisplaySizeV17(display, displaySize);
} else if(Util.SDK_INT >= 16) {
getDisplaySizeV16(display, displaySize);
} else {
getDisplaySizeV9(display, displaySize);
}
return displaySize;
}
@TargetApi(23)
private static void getDisplaySizeV23(Display display, Point outSize){
Display.Mode[] modes = display.getSupportedModes();
if(modes.length > 0){
Display.Mode mode = modes[0];
outSize.x = mode.getPhysicalWidth();
outSize.y = mode.getPhysicalHeight();
}
}
@TargetApi(17)
private static void getDisplaySizeV17(Display display, Point outSize) {
display.getRealSize(outSize);
}
@TargetApi(16)
private static void getDisplaySizeV16(Display display, Point outSize) {
display.getSize(outSize);
}
private static void getDisplaySizeV9(Display display, Point outSize) {
outSize.x = display.getWidth();
outSize.y = display.getHeight();
}
これを試しましたか?http://stackoverflow.com/a/3166582/1944049 –
Shield TVでは、コードはxhdpiと320 dpiの密度を報告します。 xxxhdpiと640dpiを報告する必要があります。 – Cobar
ソニーのX83Cと同じ状況...本当にAndroid TVで4Kを検出する信頼できる方法はありませんか? –