Android appでシステムの電力量状況をどのように監視するか
1941 ワード
電力量が低すぎる場合に問題が発生するアプリケーションが多く、
特に、カメラ、プレーヤーなどのハードウェアに関連するアプリケーションがあります.
以前、電気量5%でフラッシュをつけて写真を撮って電圧を下げてシステムが直接ハングアップしたことがありましたが...
では、このような問題をどのように解決するのでしょうか.
実はシステムサービスでは、電力量が変化すると、ラジオACTION_が発行されます.BATTERY_CHANGED
Appにブロードキャスト受信機を書いて登録すると、電力量の変化のメッセージが受信でき、電力量が一定の値に達した場合、対策を講じることができます.
例えば、ユーザの電力量が低すぎると、アプリケーションを終了するなど、
あるいは操作中のタスク、例えばゲームをしているなど、ユーザーに電力不足を提示したり、関連情報を保存したりすることができます.
録画中であれば、録画を直接停止して保存することができます.
ここでは、4%未満の場合は、そのままアプリケーションを終了して録画を保存すると判断する.その他のアプリケーションは必要に応じて別の措置をとることができます!
特に、カメラ、プレーヤーなどのハードウェアに関連するアプリケーションがあります.
以前、電気量5%でフラッシュをつけて写真を撮って電圧を下げてシステムが直接ハングアップしたことがありましたが...
では、このような問題をどのように解決するのでしょうか.
実はシステムサービスでは、電力量が変化すると、ラジオACTION_が発行されます.BATTERY_CHANGED
Appにブロードキャスト受信機を書いて登録すると、電力量の変化のメッセージが受信でき、電力量が一定の値に達した場合、対策を講じることができます.
例えば、ユーザの電力量が低すぎると、アプリケーションを終了するなど、
あるいは操作中のタスク、例えばゲームをしているなど、ユーザーに電力不足を提示したり、関連情報を保存したりすることができます.
録画中であれば、録画を直接停止して保存することができます.
private final BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int mBatteryLevel;
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
Log.d(TAG, "batteryReceiver ACTION_BATTERY_CHANGED");
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
synchronized (this) {
mBatteryLevel = level * 100 / scale;
}
Log.d(TAG, "mBatteryLevel = " + mBatteryLevel + " %");
Log.d(TAG, "mExitLowPower = " + mExitLowPower);
if (mBatteryLevel <= 4 && !mExitLowPower) {
showBatteryLowAndFinish();
Log.v(TAG,"low power mCameraState "+mCameraState);
if((mCameraState == STATE_RECORDING_IN_PROGRESS)
&& (mCameraActor instanceof VideoActor)){
Log.v(TAG,"batteryReceiver videoActor");
mCameraActor.stopActor();
}
exitCameraAwhileWhenLowPower();
} else if (mBatteryLevel > 4){
mExitLowPower = false;
}
}
}
};
ここでは、4%未満の場合は、そのままアプリケーションを終了して録画を保存すると判断する.その他のアプリケーションは必要に応じて別の措置をとることができます!