Obtenir le Niveau de la Batterie avec BroadcastReceiver dans Android

J'ai un code, que j'ai besoin d'obtenir le Niveau de la Batterie de mon appareil Android, mais j'ai un gros problème. J'ai un Android Service où je vais obtenir le niveau de la batterie et de l'envoyer par UDP.

C'est mon code de Service:

public class Servico extends Service {

String bateria = "Nada";

/*
 * Recupera nível de bateria
 */
private BroadcastReceiver BatInfoReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        bateria = String.valueOf(level);
    }
};

public void onCreate() {
    super.onCreate();
    this.registerReceiver(this.BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(getApplicationContext(), "Command=" + bateria + "%", Toast.LENGTH_LONG).show();
    stopSelf();
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(BatInfoReceiver);
}

@Override
public IBinder onBind(Intent arg0) {
    //TODO Auto-generated method stub
    return null;
}

}

Mon problème est: je ne peux pas avoir le niveau! J'ai mis un point d'arrêt dans la méthode onReceive dans BatInfoReceiver, mais ce code n'est exécuté après que l'exécution onStartCommand, et e BESOIN d'utiliser la valeur de niveau de la batterie en onStartCommand.

Comment puis-je le faire?

J'ai mis le pain dans le code uniquement pour le test!! Seulement de tester la valeur de la variable "bateria".

OriginalL'auteur Yuri Monteiro | 2013-01-18