2012-08-15 12 views
6

私のアプリケーションでは、バッテリーが不足しているときに何かしたいと思います。バッテリーが安いと、アンドロイドはACTION_BATTERY_LOWを発し、バッテリーが再び良好な状態になると、それは意図的にACTION_BATTERY_OKAYを発します。だから私はこれに関する3つの質問があります:アンドロイドが発火するときACTION_BATTERY_LOW

1.Atバッテリーの実際のパーセンテージはどれですか?ACTION_BATTERY_LOW

2.バッテリーがさらに低下した場合、同じイベントが繰り返し発生しますか?

3.アンドロイドがACTION_BATTERY_LOWのインテントを発するバッテリーのパーセンテージを設定できますか?

私は第3の点についてもっと心配しています。

答えて

8

いいえ、ACTION_BATTERY_LOWしきい値を送信するタイミングを設定することはできません。これは、Android ROMによって指定されたシステムレベルのインテントです。ただ、

/* The ACTION_BATTERY_LOW broadcast is sent in these situations: 
     * - is just un-plugged (previously was plugged) and battery level is 
     * less than or equal to WARNING, or 
     * - is not plugged and battery level falls to WARNING boundary 
     * (becomes <= mLowBatteryWarningLevel). 
     */ 
     final boolean sendBatteryLow = !plugged 
      && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN 
      && mBatteryLevel <= mLowBatteryWarningLevel 
      && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); 

     sendIntent(); 

     // Separate broadcast is sent for power connected/not connected 
     // since the standard intent will not wake any applications and some 
     // applications may want to have smart behavior based on this. 
     Intent statusIntent = new Intent(); 
     statusIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); 
     if (mPlugType != 0 && mLastPlugType == 0) { 
      statusIntent.setAction(Intent.ACTION_POWER_CONNECTED); 
      mContext.sendBroadcast(statusIntent); 
     } 
     else if (mPlugType == 0 && mLastPlugType != 0) { 
      statusIntent.setAction(Intent.ACTION_POWER_DISCONNECTED); 
      mContext.sendBroadcast(statusIntent); 
     } 

     if (sendBatteryLow) { 
      mSentLowBatteryBroadcast = true; 
      statusIntent.setAction(Intent.ACTION_BATTERY_LOW); 
      mContext.sendBroadcast(statusIntent); 
3

その意図は、BatteryServiceから発せられます。あなたは、コードを少し分析する必要があるでしょうが、私はそれが繰り返し発生しませんかなり確信している:

http://gitorious.org/android-eeepc/base/blobs/fda6fae156e31a287e3cfbf66e51ea1405cdf479/services/java/com/android/server/BatteryService.java 

それはで発射する実際の値は、Androidのリソースに設定されているので、それは時にのみ設定可能ですシステム構築。これは、我々はハードウェアのために持っているものであるが、これはおそらくAndroidが上で動作する各ハードウェア・プラットフォーム用に異なるものになります:

<!-- Display low battery warning when battery level dips to this value --> 
<integer name="config_lowBatteryWarningLevel">15</integer> 

<!-- Close low battery warning when battery level reaches this value --> 
<integer name="config_lowBatteryCloseWarningLevel">20</integer> 

カスタム・ハードウェア・プラットフォームを開発している場合を除き、私が何についての仮定をすることはないだろうこれらの値はに設定されます。

+0

mLowBatteryWarningLevel = mContext.getResources().getInteger( com.android.internal.R.integer.config_lowBatteryWarningLevel); 

はバッテリーサービスの更新方法でAndroidシステムコードから切断され、以下のコードを参照してください:ここでは、それはバッテリーのサービスに値を設定するコードですあなたの整数をどこに保存していますか?別の定数ファイルにありますか? –

+0

私はそれを見てからしばらくしていますが、バッテリーサービスのリソースで既に定義されていることは間違いありません。単に調整しただけです。 – jsmith

+1

@KalaJこれらの整数がjavaファイルで* only *使用される場合は、 'CONST.java'(定数用)または' CONFIG.java'(設定パラメータ用)という名前で保存されます。それらがUI用のものであれば、それは 'values.xml'を格納します。注: 'values.xml'は他のresファイルと似ており、ローカリゼーションなどに基づいて複数のバージョンを持つことができます。 –

関連する問題