Java Problem mit registerReceiver

  • Antworten:9
Moses Himalaia
  • Forum-Beiträge: 5

09.01.2014, 08:00:34 via Website

Moin alle!

ich hab ein kleines Problem beim erstellen einer Java Library in Eclipse für Basic4Android. Es geht um das einlesen des Batterie levels. Dazu habe ich diese Seite gefunden: developer.android.com/training/monitoring-device-state/battery-monitoring.html

Nun habe ich das in meinem Code eingefügt:
1import android.content.Context;
2import android.content.Intent;
3import android.content.IntentFilter;
4import android.os.BatteryManager;
5import anywheresoftware.b4a.BA.ShortName;
6
7@ShortName("Battery")
8public class Battery {
9
10 public int Level() {
11 Object context;
12 Intent batteryStatus = Context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
13 int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
14 int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
15 return (level / scale) * 100;
16 }
17
18}

Im hier gezeigten Code erhalte ich die Fehlermeldung:
Cannot make a static reference to the non-static method registerReceiver(BroadcastReceiver, IntentFilter) from the type Context Battery.java line 13 Java Problem

Wie bekomme ich das zu laufen? Es soll ja einfach nur das Batterie Level einmalig zurückgegeben werden.

Danke schon mal!
Grüße

— geändert am 09.01.2014, 14:11:43

Antworten
Fabian Simon
  • Forum-Beiträge: 359

09.01.2014, 08:32:38 via Website

Hallo ,
wenn du die Zeile Auskommentierst, kommt dann kein Fehler mehr ?
Wenn ja mhm...
vieleicht mim namen der Variable.
da die Methode auf Level heißt.
sollte zwar eigentlich case sensetive sein aber man weiß ja nie.
Und eigentlich registrierst du doch einen service und machst auswertung etc in der von Boradcastrecive erbende Klasse die Auswertung ??

Gruß
Fabian

Antworten
Moses Himalaia
  • Forum-Beiträge: 5

09.01.2014, 08:41:32 via Website

Danke für die Antwort!
Ich habe den Variablennamen mal geändert aber der Fehler besteht immer noch.
Wenn ich das "object context;" auskommentiere ändert sich nichts. Wenn ich die ganze Zeile "Intent batteryStatus = ...." auskommentiere dann wird wegen dem "batteryStatus.getIntExtra..." gemeckert, weil es ja nicht mehr deklariert ist.
Ich verstehe nicht warum das Beispiel von Goole selbst nicht geht. Mit dem Java SDK habe ich bisher auch nicht allzu viel gemacht.

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

09.01.2014, 09:55:55 via App

Du brauchst ja die Activityklasse, um den receiver zu registrieren. Du brauchst also das Objekt der activity . Dann kannst du die Methode über das Objekt aufrufen.

edit

vielmehr brauchst du das context Objekt. Schreib einen Konstruktor, (Baterie(Context c ) ) dort überträgst du den Parameter in ein Klassenobjekt.

— geändert am 09.01.2014, 10:00:27

Antworten
Andy N.
  • Forum-Beiträge: 22.375

09.01.2014, 09:59:19 via App

Hallo Moses,

Herzlich willkommen bei uns im Forum :)

bitte bearbeite doch nochmal etwas deinen Threadtitel, damit andere User besser erkennen können, worum es hier geht. Hierfür einfach im Browser unter deinem ersten Beitrag auf "Bearbeiten" drücken, dann kannst du oben noch mal den Titel bearbeiten.
Danke :)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Moses Himalaia
  • Forum-Beiträge: 5

09.01.2014, 14:14:01 via Website

@ Andy:
Danke für den Wilkommensgruß :D
Ich hoffe der Titel ist jetzt etwas besser, so genau weiss ich leider nicht wo genau das Probelm liegt :*)

— geändert am 09.01.2014, 14:17:13

Antworten
Moses Himalaia
  • Forum-Beiträge: 5

09.01.2014, 14:16:56 via Website

@Stephan Graf: Danke für die Antwort! Ich weiss allerdings nicht genau wie ich das umsetzen kann. Wo kommt der Konstruktor hin und welchen Parameter muss der bekommen? Ich fürchte das übersteigt mein gegenwärtiges Android Java wissen.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

09.01.2014, 14:23:43 via Website

Hallo,
aber ich finde bevor man anfängt Android zu entwickeln sollte man sich mit Java schon auskennen.
Was ein Konstrutor ist, was eine Schnittstelle ist, wie man erbt, usw...
Wenn du die gerade genannten Fragen nicht beantworten kannst:

Dann würde ich dir empfelen dieses Wissen ersteinmal anzueignen bevor du mit dem eigentlichen entwickeln Anfängst.
Und Android ist nochmal ne Spur komplizierter (breiteres Wissen) als reines Java.

Gruß
Fabian

Antworten
Moses Himalaia
  • Forum-Beiträge: 5

09.01.2014, 16:01:21 via Website

@Fabian: sicherlich richtig was du sagst. Allerdings versuche ich ja gerade durch so kleine Projekte dieses Wissen zu erlangen :D

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

10.01.2014, 11:57:29 via App

Der Konstruktor kommt in die Klasse Battery. einfach die Klasse um folgenden code erweitern:
Context c;
public Battery(Context c){
this.c = c;
}
registerReciver() wird folgendermaßen aufgerufen:
c.registerReciver(...);

Antworten