Я хочу контролировать уровень заряда батареи, и если он достигнет определенного уровня, я хочу ДЕЛАТЬ-ЧТО-ТО. Я беспокоюсь о том, что излишне избыточно изливается аккумулятор.Правильный оптимизированный способ мониторинга уровня заряда батареи в android
Использование службы будет продолжать работать в фоновом режиме. Также, если я использовал намерение android.intent.action.BATTERY_CHANGED, он будет проверять каждое изменение уровня заряда батареи. Эти два метода могут слить ненужную батарею в соответствии с моими требованиями.
Итак, если я использую AlarmManager (который также является сервисом, обрабатываемым ОС), он будет проверять уровень заряда батареи на каждом пользовательском (соответствующее время).
Следующие коды, которые я внедрил.
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
private AlarmManager mAlarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(this, AlarmReceiverTest.class);
// User defined time
long fiveMin= (AlarmManager.INTERVAL_FIFTEEN_MINUTES/3); // adjustment here
mAlarmManager.setRepeating(AlarmManager.RTC,
System.currentTimeMillis()+fiveMin, oneMin,
PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
}
вещательный приемник:
public class AlarmReceiverTest extends BroadcastReceiver {
@Override
public void onReceive(Context pContext, Intent arg1) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = pContext.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int percent = (level*100)/scale;
if(percent== myThreshold)
//DO-SOMETHING
}
}
В манифеста:
<receiver android:name="AlarmReceiverTest">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
</intent-filter>
</receiver>
Разрешение:
android.permission.BATTERY_STATS
С его повторяющимся сигналом тревоги он будет продолжать проверять, даже если приложение закрыто.
например .: DO-SOMETHING: может быть заблокировано приложение, если приложение уже было открыто. ИЛИ не разрешено открывать приложение, если оно уже было закрыто.
Является ли это правильным способом, и это мое понимание правильно? Пожалуйста, предложите мне, если есть какой-либо другой правильный способ.
Редакцией:
Если бы я, чтобы проверить уровень заряда батареи на каждые 5-10 часов интервала, что было бы лучшим способом сделать это?
Почему люди downvote это? Ответ @Sats отлично поработал для того, что мне нужно для этого. – hellaandrew