2015-01-12 8 views
12

Die Gerätedichte gibt bei einigen Geräten 0 zurück. Der folgende Code wird zum Berechnen der Gerätedichte verwendet:Android: Die Gerätedichte wird von einigen Geräten als Null zurückgegeben

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

Dies hat zu einigen Abstürzen in PlayStore geführt. Die Nutzer scheinen zu verwenden: Galaxy Y Plus; Android Version 4.0.3 - 4.0.4. Auch ein Gerät namens wing-k70 hatte Probleme. In einem Unfall war es Version 4,2.

Bitte um Rat.

Antwort

2

die folgenden Versuchen hat es einige Probleme Gerät earliar als API-Ebene 4

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

sorry, Murtaza. das würde nicht funktionieren. Wie ich in meiner Frage erwähnt habe, geht es nicht um Geräte vor Android Version 4. Es ist in einem Gerät mit Version 4+ passiert – Jean

+0

ist es zufällig oder es gibt 0 jedes Mal auf diesen Geräten? –

+0

P.S. Es kann Probleme mit gerooteten Geräten geben. –

3

diese Weise für mich in API-Ebene funktioniert 4 oder höher .:

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

gibt es nicht viel Sie kann anders als dies anmutig handhaben. Wenn die Dichte Null oder 0 ist, überprüfen Sie sie und verwenden Sie in diesem Fall einen Standardwert.

+0

Auch wenn es eine Lösung gibt, die Dichte dieser speziellen Geräte zu finden, ist es wahrscheinlich, dass diese Situation mit einem anderen Modell auf der ganzen Linie wieder auftreten könnte. – SuperBiasedMan

5

Eine gute Möglichkeit, die DPI zu bekommen, ist eine string.xml-Datei für jede Dichte zu generieren.

Erstellen Sie Ordner namens values-mdpi, values-hdpi, values-xhdpi ... und fügen Sie strings.xml in jedem hinzu, mit einer Zeichenfolge namens dichte mit dem Wert der Dichte (mdpi für strings.xml in Werten -mdpi, usw.)

dann lesen R.String.density gibt Ihnen die richtige Dichte

+0

Bitte nicht identische Antworten zu mehreren Fragen posten. Schreibe eine gute Antwort, dann vote/flag, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, * schneide deine Antworten auf die Frage *. –

+0

Der einzige Grund, warum ich diese Antwort nicht als Dupe gelöscht habe, ist, dass diese Frage gebooten wird und man nicht dafür stimmen kann, sie als Duplikat zu schließen. Wenn dieser Beitrag kein Duplikat ist, passen Sie Ihre Antwort entsprechend an. –

Verwandte Themen