2012-11-05 73 views
10

當設備的電池電量不足時,我想關閉我的應用程序。 我在清單中添加了以下代碼。如何檢測電池電量低時:Android?

<receiver android:name=".BatteryLevelReceiver" 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_BATTERY_LOW" /> 
      <action android:name="android.intent.action.ACTION_BATTERY_OKAY" /> 
     </intent-filter> 
</receiver> 

而下面的代碼在接收器

public class BatteryLevelReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show(); 
     Log.e("", "BATTERY LOW!!"); 
    } 
} 

我正在上emulater應用和改變使用telnet電池電量。 它改變電池電量,但不顯示任何烤麪包或日誌。

我在想什麼? 任何幫助表示讚賞! 謝謝。

回答

5

在代碼中註冊您的接收器,而不是在AndroidManifest文件中註冊。

registerReceiver(batteryChangeReceiver, new IntentFilter(
    Intent.ACTION_BATTERY_CHANGED)); // register in activity or service 

public class BatteryChangeReceiver extends BroadcastReceiver { 

    int scale = -1; 
    int level = -1; 
    int voltage = -1; 
    int temp = -1; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
     scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
     temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
     voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
    } 
} 

unregisterReceiver(batteryChangeReceiver);//unregister in the activity or service 

或者收聽空電池的電量。

Intent BATTERYintent = this.registerReceiver(null, new IntentFilter(
     Intent.ACTION_BATTERY_CHANGED)); 
int level = BATTERYintent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
Log.v(null, "LEVEL" + level); 
+0

感謝您的回覆。 我試過registerReceiver(myBatteryReceiverLow,新的IntentFilter(Intent.ACTION_BATTERY_LOW)); 但它不是工作壓力太大:( – Aadi

+1

你有沒有洗過清單,併發送廣播動作handly ACTION_BATTERY_LOW =「android.intent.action.BATTERY_LOW」; – Yahor10

+0

我已經打掃清單 但什麼是發送廣播動作handly意思? 我沒有在廣播上工作太多..你能幫我嗎? – Aadi

33

您可以在AndroidManifest.xml註冊您的接收器,但是,應確保您正在篩選的作用是

android.intent.action.BATTERY_LOW

,而不是

android.intent.action.ACTION_BATTERY_LOW

(您在代碼中使用過)。

+0

這是絕對正確的。 對我的作品! –

+0

與艙單過於 –

7

k3v是正確的。

文檔中實際存在錯誤。 它具體說使用「android.intent.action.ACTION_BATTERY_LOW」。 但正確的行動,把清單中的「android.intent.action.BATTERY_LOW」 在這裏看到:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

(不能投票K3V的回答了,沒有足夠的計算器點一樣的東西......)

更新:我現在可以並做了 - 投票k3v的回答:-)

+0

註冊好了新的文件還提到ACTION_BATTERY_LOW –

+0

作品是,K3v的回答是絕對正確的,應該是公認的答案 –

+0

剛剛與CommonsWare就另一個問題進行了討論。 htly指出,使用BATTERY_LOW,我們開始引用ACTION_BATTERY_LOW常量的字符串值。需要弄清楚常數不起作用的原因 –

0

也許模擬器不響應BATTERY_LOWBATTERY_OKAY消息。嘗試一個真正的Android設備。

相關問題