Ciao a tutti, ancora questo forum non è stato usato per aiuti tecnici sulla realizzazione di programmi, spero quindi che non sia il posto sbagliato.
Sto cercando di iniziare a programmare qualcosina in java per android, sono abbastanza agli inizi sia con java che con la programmazione per android, fino a ieri avevo programmato solo in C ;)
Volevo intanto realizzare un semplice widget che mi faccia vedere la carica attuale della batteria per poi modificarlo con un'idea mia. Ho cercato qualche esempio e uno dei più semplici è stato questo. Posto il codice del file .java
package lol.peoplepaidforthis.widget;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.RemoteViews;
public class BatteryMonitorWidget extends AppWidgetProvider
{
public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds )
{
// widgets cant register receivers, so make a service do it
Intent asd = new Intent(context, BatteryMonitorReceiver.class);
context.startService(asd);
}
public static class BatteryMonitorReceiver extends Service
{
public int currentBatteryLevel = 0;
private BroadcastReceiver batteryReceiver = new BroadcastReceiver()
{
@Override
public void onReceive( Context context, Intent intent )
{
currentBatteryLevel = intent.getIntExtra( "level", 0 );
}
};
@Override
public void onStart( Intent intent, int startId )
{
registerReceiver( batteryReceiver, new IntentFilter( Intent.ACTION_BATTERY_CHANGED ) );
RemoteViews updateViews = new RemoteViews( getPackageName(), R.layout.main );
// should fix the font size here
updateViews.setTextViewText( R.id.condition, currentBatteryLevel +"%" );
// change image here (if anyone ever sends me images) to denote different % filled
//updateViews.setImageViewResource( R.id.ImageView01, R.drawable.battery_condition );
ComponentName thisWidget = new ComponentName( this, BatteryMonitorWidget.class );
AppWidgetManager manager = AppWidgetManager.getInstance( this );
manager.updateAppWidget( thisWidget, updateViews );
}
@Override
public IBinder onBind( Intent intent )
{
// TODO Auto-generated method stub
return null;
}
}
}
Ecco il tutto sono riuscito a farlo funzionare ma semplicemente il widget non viene aggiornato!
Da quello che ho capito in un file xml ho impostato i millisecondi di aggiornamento del widget e ad ogni update viene eseguito il codice che è dentro a onUpdate(...)
lo sviluppatore originale dentro a onUpdate ha messo un ulteriore chiamata ad un altra classe come servizio (startService)
il mio dubbio è che onUpdate venga considerato ma poi quando il sistema incontra startService dopo la prima volta il servizio non venga realmente avviato o riavviato perchè è già attivo
infatti se cambio il livello di carica dell'emulatore e aggiungo un ulteriore widget la carica si aggiorna altrimenti no..
D'altra parte da quello che ho capito non si può ricavare il livello di carica direttamente dalla classe principale del widget
grazie