そのため、私のアプリでは、アプリを閉じているときでもバッテリー レベルを監視し、バッテリーが一定の割合を下回ったら通知を送信したいと考えています。このようなバックグラウンド サービスを作成する方法は知っていますが、これを使用してバッテリー レベルを監視する方法がわかりません。マニフェスト ファイルに BroadcastReceiver を登録しますか、それとも動的に行う必要がありますか? また、最初の更新を受信した後、BroadcastReceiver が OS によって終了されることも懸念されます。
質問する
3973 次
1 に答える
6
動的に登録する必要があります。
サービスでこれを行うことは、おそらく良いことです。これは私が使用したものです:
this.registerReceiver(this.mBatInfoReceiver,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
...
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
//this will give you battery current status
try{
int level = intent.getIntExtra("level", 0);
int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
String BStatus = "No Data";
if (status == BatteryManager.BATTERY_STATUS_CHARGING){BStatus = "Charging";}
if (status == BatteryManager.BATTERY_STATUS_DISCHARGING){BStatus = "Discharging";}
if (status == BatteryManager.BATTERY_STATUS_FULL){BStatus = "Full";}
if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING){BStatus = "Not Charging";}
if (status == BatteryManager.BATTERY_STATUS_UNKNOWN){BStatus = "Unknown";}
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
String BattPowerSource = "No Data";
if (chargePlug == BatteryManager.BATTERY_PLUGGED_AC){BattPowerSource = "AC";}
if (chargePlug == BatteryManager.BATTERY_PLUGGED_USB){BattPowerSource = "USB";}
String BattLevel = String.valueOf(level);
int BHealth = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
String BatteryHealth = "No Data";
if (BHealth == BatteryManager.BATTERY_HEALTH_COLD){BatteryHealth = "Cold";}
if (BHealth == BatteryManager.BATTERY_HEALTH_DEAD){BatteryHealth = "Dead";}
if (BHealth == BatteryManager.BATTERY_HEALTH_GOOD){BatteryHealth = "Good";}
if (BHealth == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){BatteryHealth = "Over-Voltage";}
if (BHealth == BatteryManager.BATTERY_HEALTH_OVERHEAT){BatteryHealth = "Overheat";}
if (BHealth == BatteryManager.BATTERY_HEALTH_UNKNOWN){BatteryHealth = "Unknown";}
if (BHealth == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){BatteryHealth = "Unspecified Failure";}
//Do whatever with the data here
} catch (Exception e){
Log.v(TAG, "Battery Info Error");
}
}
};
于 2013-09-25T02:19:33.817 に答える