0

I'm making a widget and i know some of my code such as the broadcastReceiver is wrong at the moment but it wont even update to hardcoded setTextViewText.

My problem is I've no idea why this happens and my widget just wont update.

Here's my code i hope someone can figure out where ive gone wrong:

public class Widget extends AppWidgetProvider {

RemoteViews views;

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    int N = appWidgetIds.length;
    views = new RemoteViews(context.getPackageName(), R.layout.widget);
    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];


        IntentFilter batteryLevelFliter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        context.registerReceiver(batteryChangedReceiver, batteryLevelFliter);

        String alarm = Settings.System.getString(context.getContentResolver(),
                Settings.System.NEXT_ALARM_FORMATTED);
        views.setTextViewText(R.id.tvAlarm, alarm);

        views.setTextViewText(R.id.tvNextAlarm, "qwertyuiop");

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int rawLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        int level = -1;
        if (rawLevel >= 0 && scale > 0) {
            level = (rawLevel * 100) / scale;
        }
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING;
        if (charging) {
            views.setTextViewText(R.id.tvBattery, "Charging: " + level + "%");
            if (level == 100) {
                views.setTextViewText(R.id.tvBattery, "Battery Full");
            }
        } else {
            views.setTextViewText(R.id.tvBattery, "Battery: " + level + "%");
        }
    }
};

}
Timmo
  • 2,266
  • 4
  • 34
  • 54

1 Answers1

0

AppWidgetProvider extends android.content.BroadcastReceiver, so you cannot register new BroadcastReceiver to the your AppWidget's context. In your code, you will not receive battery event from your BroadcastReceiver. Refer these previous questions. :)

Android Broadcast Receiver in Widget

Register BroadcastReceiver to Widget (Difference of Context object)

Community
  • 1
  • 1
sMiLo
  • 463
  • 6
  • 10