У меня есть служба, которая выполняет фоновые обновления.
Я хочу дать пользователю возможность отключить обновления, когда их процент заряда батареи достигает определенного уровня.
Из моего исследования я собираюсь использовать приемник в методе onCreate
моего класса обслуживания, например:
public class MainService extends Service
{
@Override
public void onCreate()
{
this.registerReceiver(this.BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver BatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
int level = intent.getIntExtra("level", 0);
}
};
}
Я предполагаю, что лучше всего оставить сервис включенным, проверить уровень заряда батареи в сервисе и не выполнять код, интенсивно использующий процессор, исходя из процента?
На самом деле мне не нужно останавливать саму службу и запускать ее снова, исходя из процента заряда батареи?
UPDATE:
Это кажется лучшим решением, но не на 100% уверен. Я зарегистрировал BroadcastReceiver
в AndroidManifest
:
<receiver android:name="BatteryReceiver" />
Затем создал BroadcastReceiver:
public class BatteryReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context, final Intent intent)
{
final int currentBatteryPercent = intent.getIntExtra("level", 0);
final int disableBatteryPercent = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context).getString("batteryPercent", 0);
//AlarmReceiver is the service that performs the background updates
final ComponentName component = new ComponentName(context, AlarmReceiver.class);
if (currentBatteryPercent < disableBatteryPercent)
{
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
}
else
{
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);
}
}
}