Программируем под Android, работа с сервисами и ресиверами


Как и обещал , рассмотрим Сервисы.
Сервисы в android, простыми словами, это некий активити без интерфейса, работающий в фоновом режиме.
По такому принципу будет работать наше приложение.

У нас всё готов, кроме Сервиса.
Остальные пункты были рассмотрены нами:

  1. Ресивер, отслеживающий вкл. аппарата
  2. Ресивер отслеживающий заряд батареи

Для создания сервиса нам необходимо в 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

vox-populijavaпрограммированиеandroidразработка
190
99.382 GOLOS
0
В избранное
Web Development
Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает тех программистов, которые презирают тех, кто их презирает.
190
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (1)
Сортировать по:
Сначала старые