0

Я создаю виджет, и я знаю, что некоторые из моего кода, такие как broadcastReceiver, ошибочны в данный момент, но он даже не обновляется до hardcoded setTextViewText.Android-виджет не обновляется

Моя проблема: я понятия не имею, почему это происходит, и мой виджет просто не обновляется.

Вот мой код я надеюсь, кто-то может выяснить, где ивы пошли не так:

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 + "%"); 
     } 
    } 
}; 

} 

ответ

0

AppWidgetProvider расширяет android.content.BroadcastReceiver, так что вы не можете зарегистрировать новый BroadcastReceiver к контексту вашего AppWidget в. В вашем коде вы не получите событие батареи от вашего BroadcastReceiver. См. Предыдущие вопросы. :)

Android Broadcast Receiver in Widget

Register BroadcastReceiver to Widget (Difference of Context object)

Смежные вопросы