2015-01-12 41 views
12

設備密度從某些設備返回0。以下代碼用於計算設備密度:Android:設備密度從某些設備返回爲零

WindowManager wm = (WindowManager) context 
     .getSystemService(Context.WINDOW_SERVICE); 
DisplayMetrics metrics = new DisplayMetrics(); 
wm.getDefaultDisplay().getMetrics(metrics); 
density = metrics.density; 

這導致了PlayStore中的一些崩潰。用戶似乎在使用:Galaxy Y Plus; Android版本4.0.3 - 4.0.4。還有一種稱爲wing-k70的設備存在問題。在一次崩潰中,它的版本是4.2

請指教。

回答

2

嘗試以下,它比API級別的一些問題設備earliar 4

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
int densityDpi = (int)(metrics.density * 160f); 
+0

對不起,Murtaza。這是行不通的。正如我在我的問題中提到的,這不是關於早於Android版本4的設備。它發生在版本爲4+的設備中 – Jean

+0

是隨機還是每次在這些設備上都給出0? –

+0

P.S.根源設備可能存在問題。 –

3

這樣對我的作品在API級別4或更高:

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
switch(metrics.densityDpi){ 
    case DisplayMetrics.DENSITY_LOW: 
       break; 
    case DisplayMetrics.DENSITY_MEDIUM: 
       break; 
    case DisplayMetrics.DENSITY_HIGH: 
       break; 
} 
7

沒有太多的你除了優雅地處理這件事之外別無他法。 如果密度爲空或0,請檢查它並在此情況下使用默認值。

+0

即使有解決方案來查找這些特定設備的密度,這種情況很可能會在另一個模型中再次出現。 – SuperBiasedMan

5

獲取DPI的好方法是爲每個密度生成一個string.xml文件。

創建名爲values-mdpi,values-hdpi,values-xhdpi ...的文件夾,並在每個人中添加一個strings.xml,其密度值爲密度字符串(位於值中的字符串爲mdpi) -mdpi等)

然後讀取R.string.density會給你正確的密度

+0

請不要在多個問題上發佈相同的答案。發佈一個很好的答案,然後投票/標記以重複關閉其他問題。如果問題不重複,*定製您對問題*的答案。 –

+0

我沒有刪除這個答案作爲一個愚蠢的唯一原因是,這個問題是有收穫的,你不能投票關閉它作爲一個副本。如果這篇文章不是重複的,請確保適當地調整您的答案。 –

相關問題