Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Программируем под 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

2
15.846 GOLOS
На Golos с August 2017
Комментарии (1)
Сортировать по:
Сначала старые