# BatterieWidget update jede Sekunde



## JDProgrammings (29. Mai 2014)

Hallo,
Ich suche nach einer Lösung, wie ich mein BatterieWidget aktualisieren kann. Es wird nur die Anfangsprozentzahl angezeigt und wenn sich dann die Zahl ändert bleibt sie beim Widget immer gleich.
Hier mein Code:

```
public class BatteryWidgetProvider extends AppWidgetProvider {
	
	private static final String ACTION_BATTERY_UPDATE = "de.atomx.rootmanager.widget.action.UPDATE";
	int batteryLevel;
	int connected = 0;
	
    @Override
	public void onEnabled(final Context context) {
		super.onEnabled(context);
		
	}
    
    @Override
	public void onDisabled(Context context) {
		super.onDisabled(context);
	}

    @Override
	public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        
    	int currentLevel = calculateBatteryLevel(context);
    	if (batteryChanged(currentLevel)) {
    		batteryLevel = currentLevel;
    	}
    	updateViews(context);
    	connected = checkConnected(context);
		updateViews(context);
    }
	
	@Override
	public void onReceive(final Context context, final Intent intent) {
		super.onReceive(context, intent);
	 
		if (intent.getAction().equals(ACTION_BATTERY_UPDATE)) {
			int currentLevel = calculateBatteryLevel(context);
			if (batteryChanged(currentLevel)) {
				batteryLevel = currentLevel;
				updateViews(context);
			}
			connected = checkConnected(context);
			updateViews(context);
		}
	}

	private void updateViews(Context context) {
		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_battery);
		views.setTextViewText(R.id.batterywidgetlevel, batteryLevel + "%");
		views.setTextViewText(R.id.batterywidgetconnected, String.valueOf(connected));
	 
		ComponentName componentName = new ComponentName(context, BatteryWidgetProvider.class);
		AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
		appWidgetManager.updateAppWidget(componentName, views);
	}
	
	private boolean batteryChanged(int currentLevelLeft) {
		return (batteryLevel != currentLevelLeft);
	}
	
	private int checkConnected(Context context) {
		Intent batteryIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
		int connected = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
		return connected;
	}
	
	private int calculateBatteryLevel(Context context) {
		Intent batteryIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
	 
		int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
		int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
		return level * 100 / scale;
	}
}
```


----------



## dzim (30. Mai 2014)

*Gähn*

Schau mal hier: Android (Home screen) Widgets - Tutorial

Eigentlich ist es fast wie ein Mantra: *Schau auf Lars Vogels Seite, Schau auf Lars Vogels Seite,Schau auf ...*


----------

