ショート問題
DisplayMetrics.densityDpi は、ルート化されたデバイスではゼロのようです。
長い問題
アプリで次のコードを使用しています。
public static int getIconSize(Activity activity) {
int size;
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch (metrics.densityDpi) {
case DisplayMetrics.DENSITY_LOW:
size = 36;
break;
case DisplayMetrics.DENSITY_MEDIUM:
size = 48;
break;
case DisplayMetrics.DENSITY_TV:
size = 64;
break;
case DisplayMetrics.DENSITY_HIGH:
size = 72;
break;
case DisplayMetrics.DENSITY_XHIGH:
size = 96;
break;
case DisplayMetrics.DENSITY_400:
size = 120;
break;
case DisplayMetrics.DENSITY_XXHIGH:
size = 144;
break;
case DisplayMetrics.DENSITY_560:
size = 168;
break;
case DisplayMetrics.DENSITY_XXXHIGH:
size = 192;
break;
default:
size = (int) (metrics.densityDpi * (3/10));
}
return size;
}
これを使用して、実行時にアプリによって作成されるアイコンをスケーリングし、他のアプリから取得したアイコンをスケーリングします。これらのアイコンは常に適切なサイズであるとは限らないためです。
これはうまく機能しますが、(一部の)ルート化されたデバイスでは失敗するようです。サイズはゼロとして返されるため、コードから、metrics.densityDpi はゼロに等しくなければならないと結論付けることができます。(これをテストするためのルート化された電話はありません)
マニフェストのセクションを調べました<supports-screens>
が、デフォルト値が必要なもののようです。
これが起こっている理由とおそらく修正を知っている人はいますか?
ありがとうございました