Программируем под Android, работа с сервисами и ресиверами
Как и обещал , рассмотрим Сервисы.
Сервисы в android, простыми словами, это некий активити без интерфейса, работающий в фоновом режиме.
По такому принципу будет работать наше приложение.
У нас всё готов, кроме Сервиса.
Остальные пункты были рассмотрены нами:
Для создания сервиса нам необходимо в ide Android Studio, нажав правую кнопку мыши, выбрать New-Service-Service, я назвал его BatteryService.
Откроется окно с сгенерированным кодом и мы его переделаем.
public class BatteryService extends Service {
public BatteryService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerReceiver(new PowerConnectionReceiver(), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
Log.d("myapp", "start service");
return Service.START_STICKY;
}
public void onCreate()
{
super.onCreate();
}
public void onDestroy()
{
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
onStartCommand - метод служит для управления сервисом, он срабатывает, при вызове startService.
Здесь мы регистрируем ресивер, отслеживающий заряд батареи.
Возвращает он число, к примеру, Service.START_STICKY - сервис будет перезапущен после того, как был убит системой. Остальные константы, можно посмотреть здесь.
onDestroy - метод, освобождающий ресурсы после "убийства" сервиса.
Создаём новый ресивер, как описано было ранее, и просто перепишем из MainActivity, с некоторыми изменениями.
public class PowerConnectionReceiver extends BroadcastReceiver {
long mills = 2000L;
float level = 30.0f;
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra("level", -1);
Log.d("myapp", BatteryManager.ACTION_CHARGING);
if(status >= level){
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(mills);
Toast.makeText(context.getApplicationContext(), "Хватит заряжать", Toast.LENGTH_SHORT).show();
}
}
}
И в конце. допишем наш AndroidManifest.xml
<service
android:name=".BatteryService"
android:enabled="true"
android:exported="true" />
<receiver
android:name=".PowerConnectionReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
Здесь мы регистрируем свой ресивер новый и сервис.
Ресиверу PowerConnectionReceiver в intent-filter разрешаем отслеживать подключение к зарядному устройству и отключение.
Далее мы доработаем наше приложение.
Материал подготовлен автором @zheev
Главное фото статьи взято с ewmr.ru