8

以下のサンプル ページのコードをアプリで使用して、デバイスが電源アダプターに接続/切断されたときを監視しています。

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

だから私は私のマニフェストに持っています:

    <receiver android:name=".StatusChangeReceiver">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>
    </receiver>

そして、私のクラスは次のようになります。

public class StatusChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    boolean isActive = prefs.getBoolean("isActive", false);
    if (isActive){
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
        // Do somthing with isCharging here
    }

}

ただし、電源が接続されているか切断されているかに関係なく、isCharging は常に false です。イベントを発生させるためにUSBケーブルを接続(切断)し続ける必要があるため、明らかにこれをデバッグするのに問題があります。

電源が接続されるとイベントが発生し、コードが実行される前にステータスが更新されないと思いますが、それを解決する最善の方法がわかりません。何か案は?

4

4 に答える 4

0

ここでも説明: ACTION_POWER_CONNECTED のバッテリーステータス

私は同じ問題を抱えていて、バッテリーの状態を呼び出したり確認したりするのが速すぎました。ACTION_BATTERY_CHANGED が更新される前に ACTION_POWER_CONNECTED が呼び出されるため、おそらく AlarmManager を使用して、数秒後に再び起動するようにスケジュールし、再度確認してください。2 秒では、私のテストでは十分な長さではありません...

于 2012-08-08T16:01:52.780 に答える