3

Androidデバイスのバッテリーレベルを取得する必要があるコードがありますが、大きな問題があります。バッテリーレベルを取得してUDPで送信するAndroidサービスがあります。

これは私のサービスコードです:

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;
}

}

私の問題は:レベルを取得できない!BatInfoReceiverのonReceiveメソッドにBreakPointを配置しましたが、このコードはonStartCommandの実行後にのみ実行され、バッテリーレベルの値をonStartCommandに使用する必要があります。

どうすればいいですか?

4

3 に答える 3

4

mainfiestファイルに次の権限を追加しましたか?

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

onReceivedメソッドを次のように変更します。

private BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive( Context context, Intent intent )
            {
                int level = intent.getIntExtra( "level", 0 );
                bat= String.valueOf(level) + "%" ;
            }
    };

バトリーレベルを取得するには、次のコード行を使用します。

registerReceiver( batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED) );
于 2013-01-18T19:12:29.687 に答える
1

これを見てください、それはあなたがあなたのサービスを始めることができるようにあなたが必要とするバッテリーレベルをあなたに与えるでしょう。BatteryManager.EXTRA_LEVELインテントからレベルを取得するためのキーとして使用するだけです

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

于 2013-01-18T19:54:31.680 に答える
1

私の問題の解決策はtyczjの答えでした、私はちょうど私の問題に適応しました。

私の新しいコード:

public void onCreate() {
    super.onCreate();

    //registerReceiver(BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);

    // Are we charging / charged?
    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    bateria = String.valueOf(status);

}
于 2013-01-21T11:57:38.757 に答える