znieh99
Fortgeschrittenes Mitglied
- 12
Hallo Forum,
ich möchte zum Ermitteln des Batterie-Ladestatus den BroadcastReceiver einsetzen. Er soll mir melden wann der Ladevorgang beginnt bzw. endet. Dazu habe ich ihn in eine eigene Klasse ausgelagert, welche mittels Handler diese Ereignisse an die Main melden soll.
Mit den Emulatoren kann ich das nicht testen, da der Status immer 2 (AC Charge) ist und daher keine Änderung auftritt die den Receiver aufruft.
Lass ich die App auf meinen Handy laufen und löse oder verbinde die Lade-Verbindung bekomme ich am Handy die Meldung: "Leider wurde das Programm BatteryManager beendet."
Entferne ich den Handler-Teil (wie im Code) bekomme ich kein Meldung und die App macht auch den Button-gesteuerten Update nicht mehr.
Ich hoffe es kann mir jemand helfen!
Hier die Code-Segmente:
MainActivity:
PowerConnectionReceiver:
CheckBattery:
ich möchte zum Ermitteln des Batterie-Ladestatus den BroadcastReceiver einsetzen. Er soll mir melden wann der Ladevorgang beginnt bzw. endet. Dazu habe ich ihn in eine eigene Klasse ausgelagert, welche mittels Handler diese Ereignisse an die Main melden soll.
Mit den Emulatoren kann ich das nicht testen, da der Status immer 2 (AC Charge) ist und daher keine Änderung auftritt die den Receiver aufruft.
Lass ich die App auf meinen Handy laufen und löse oder verbinde die Lade-Verbindung bekomme ich am Handy die Meldung: "Leider wurde das Programm BatteryManager beendet."
Entferne ich den Handler-Teil (wie im Code) bekomme ich kein Meldung und die App macht auch den Button-gesteuerten Update nicht mehr.
Ich hoffe es kann mir jemand helfen!
Hier die Code-Segmente:
MainActivity:
Code:
package com.app.heinz.batterymanager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
IntentFilter ifilter;
Intent batteryStatus;
Context mContext;
private Handler mHandler;
TextView t1;
TextView t2;
TextView t3;
TextView t4;
TextView t5;
TextView t6;
TextView t7;
TextView t8;
PowerConnectionReceiver r;
CheckBattery checkB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t1 = (TextView) findViewById(R.id.textview_1);
t2 = (TextView) findViewById(R.id.textview_2);
t3 = (TextView) findViewById(R.id.textview_3);
t4 = (TextView) findViewById(R.id.textview_4);
t5 = (TextView) findViewById(R.id.textview_5);
t6 = (TextView) findViewById(R.id.textview_6);
t7 = (TextView) findViewById(R.id.textview_7);
t8 = (TextView) findViewById(R.id.textview_8);
// Hier wird der Handler erstellt und die Message
// empfangen
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
System.out.println("MSG von CheckBattery: " + msg.what);
checkB.check();
viewData();
super.handleMessage(msg);
}
}; //end mHandler ---------------------
mContext = getApplicationContext();
r = new PowerConnectionReceiver(mHandler);
checkB = new CheckBattery(mContext);
}
/**
* Button Start Check gedrückt
* @param v
*/
public void onStartCheck(View v) {
checkB.check();
viewData();
}
/**
* Anzeige der Batterie-Daten
*/
private void viewData() {
t1.setText("Status: " + checkB.getStatus());
t2.setText("Charging: " + checkB.getCharging());
t3.setText("ChargePlug: " + checkB.getChargePlug());
t4.setText("USB Charge: " + checkB.getUsbCharge());
t5.setText("AC Charge: " + checkB.getAcCharge());
t6.setText("Level: " + checkB.getLevel());
t7.setText("Scale: " + checkB.getScale());
t8.setText("BatteryPct: " + checkB.getBatteryPct());
}
}
PowerConnectionReceiver:
Code:
package com.app.heinz.batterymanager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.os.Handler;
import android.os.Message;
public class PowerConnectionReceiver extends BroadcastReceiver {
Handler mHandler;
public PowerConnectionReceiver() {}
public PowerConnectionReceiver(Handler h) {
mHandler = h;
}
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// Meldung an Main dass Ladestatus geändert
// Message msg = Message.obtain();
// msg.what = 100;
// // System.out.println("Flag 1: " + new Date());
// mHandler.sendMessage(msg);
}
}
CheckBattery:
Code:
package com.app.heinz.batterymanager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Handler;
import android.os.Message;
import java.util.Date;
public class CheckBattery {
IntentFilter ifilter;
Intent batteryStatus;
Context context;
private Handler mHandler;
private int status;
private boolean isCharging;
private int chargePlug;
private boolean usbCharge;
private boolean acCharge;
private int level;
private int scale;
private float batteryPct;
public CheckBattery(Context c) {
context = c;
ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
batteryStatus = context.registerReceiver(null, ifilter);
// mHandler = h;
}
/**
* Wird vom System aufgerufen wenn sich der Lade-Status ändert
* @param context
* @param intent
*/
// @Override
// public void onReceive(Context context, Intent intent) {
// status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
// isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
// status == BatteryManager.BATTERY_STATUS_FULL;
//
// // Meldung an Main dass Ladestatus geändert
// Message msg = Message.obtain();
// msg.what = 100;
// System.out.println("Flag 1: " + new Date());
// mHandler.sendMessage(msg);
//
//
// }
/**
* Aktualisiert die Daten des Batteriestatus
*/
public void check() {
// Are we charging / charged?
status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// How are we charging?
chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
batteryPct = level / (float)scale;
}
// Getter
public int getStatus() { return status; }
public boolean getCharging() { return isCharging; }
public int getChargePlug() { return chargePlug; }
public boolean getUsbCharge() { return usbCharge; }
public boolean getAcCharge() { return acCharge; }
public int getLevel() { return level; }
public int getScale() { return scale; }
public float getBatteryPct() { return batteryPct;
}
}