2017-12-20 6 views
0

Ich bin mit dem Beispielcode Watch von unten https://github.com/googlecodelabs/watchfaceErste und Anzeigen Batterie Informationen über Android Wear Watch

Ich versuche, den Ladezustand der Batterie Informationen zu Watch hinzufügen, aber ich bekomme diese Fehlermeldung.

12-20 11: 39: 15.042 2914-2914/com.example.android.wearable.watchface E/Android Runtime: fatal EXCEPTION: main Prozess: com.example.android.wearable.watchface, PID : 2914 java.lang.RuntimeException: Kann Service com.example.android.wearable.watchface.watchface.DigitalWatchFaceService instanziiert: java.lang.NullPointerException: Versuch zum aufrufen virtuelle Methode ‚android.content.Intent android. content.Context.registerReceiver (android.content.BroadcastReceiver, android.content.IntentFilter) 'für eine Nullobjektreferenz bei android.app.ActivityThread.handleCreateService (ActivityThread.java:3389) bei android.app.ActivityThread.-wrap4 (Unknown Source: 0)
bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java: 1683) bei android.os.Handler.dispatchMessage (Handler.java:105)
bei android.os.Looper.loop (Looper.java:164)
bei android.app.ActivityThread.main (ActivityThread.java: 6541)
bei java.lang.reflect.Method.invoke (Mutter Methode)
bei com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) bei com.android .internal.os.ZygoteInit.main (ZygoteInit.java:767)
Verursacht durch: java.lang.NullPointerException: Versuch virtuelle Methode ‚aufzurufen android.content.Intent android.content.Context.registerReceiver (android.content .BroadcastReceiver, android.content.IntentFilter)‘auf null Objektreferenz
bei android.content.ContextWrapper.registerReceiver (ContextWrapper.java:603) bei com.example.android.wearable.watchface.watchface.DigitalWatchFaceService . (DigitalWatchFaceService.java:81) bei java.lang.Class.newInstance (native Methode)
um android.app.ActivityThread.handleCreateSer Schraubstock (ActivityThread.java:3386) bei android.app.ActivityThread.-wrap4 (Unknown Source: 0)
bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1683) bei android.os. Handler.dispatchMessage (Handler.java:105) bei android.os.Looper.loop (Looper.java:164)
bei android.app.ActivityThread.main (ActivityThread.java:6541)
bei java.lang. reflect.Method.invoke (native Methode)
bei com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 767) 12-20 11: 39: 15.082 2914-2914/com.beispiel.android.wearable.watchface I/Prozess: Senden des Signals. PID: 2914 SIG: 9

Dies ist das Bit in "DigitalWatchFaceService.java“, die den Fehler

// Battery code 
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
Intent batteryStatus = registerReceiver(null, ifilter); 
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

float batteryPct = level/(float)scale; 
+0

Formatiert die Ausnahmemeldung –

+0

Warum sind Sie ein Null 'BroadcastReceiver' zu registrieren versuchen? – String

Antwort

0

dies Das funktionierte mit verursacht:

public String GetBatteryLevel() { Intent batteryIntent = registerReceiver (null, neue IntentFilter (Intent.ACTION_BATTERY_CHANGED)); int level = batteryIntent .getIntExtra (BatteryManager.EXTRA_LEVEL, -1); int scale = batteryIntent.getIntExtra (BatteryManager.EXTRA_SCALE, -1);

// Error checking that probably isn't needed but I added just in case. 
if(level == -1 || scale == -1) { 
    return "error"; 
} 


float batteryLevelWithDecimals = ((float)level/(float)scale) * 100.0f; 
String battery = String.format("%.0f", batteryLevelWithDecimals); 
return battery ; 

}

Dann können Sie das Batterieniveau Zeichenfolge wie folgt aufrufen:

 canvas.drawText(
       String.valueOf(getBatteryLevel()), 
       mXOffset, mYOffset + mLineHeight * 3, mDatePaint);