Остановить HCE, если sdk ‹ Kitkat

У меня странный вопрос. Я хочу знать, могу ли я заблокировать функцию/службу hce, если SDK устройства меньше требуемого Kitkat SDK? На данный момент я останавливаю службу HCE при запуске своего приложения, но я не уверен, что это правильный путь.

if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT){
                //Disable Hce service if sdk < 19
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("at.ventopay.mocca.hce_service", "at.ventopay.mocca.hce_service.MyHostApduService"));
                stopService(intent);
            }

Это работает как шарм, но я просто не уверен, что должен это делать. Теперь мой вопрос: могу ли я заблокировать функцию HCE, если SDK устройства неверен, или мое устройство должно быть >=Kitkat, если я использую HCE?


person miron123    schedule 15.07.2014    source источник
comment
Есть ли причина, по которой вы хотите явно остановить службу для версий API ‹ 19?   -  person Michael Roland    schedule 16.07.2014
comment
Я хотел остановить службу HCE, если устройство ее не поддерживает. Мне нужно остановить это, потому что моему приложению не требуется функция HCE, но она используется, если это возможно.   -  person miron123    schedule 24.07.2014


Ответы (1)


Нет причин останавливать службу HCE на версиях платформы ‹ 19. Если ваша версия Android не поддерживает HCE или не использует вашу службу HCE, она даже не будет генерировать событие, которое запускает компонент службы в первую очередь.

Ваш сервис регистрируется в системе через такой раздел в вашем манифесте:

<service android:name="..." android:exported="true"
         android:permission="android.permission.BIND_NFC_SERVICE">
    <intent-filter>
        <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
    </intent-filter>
    <meta-data android:name="android.nfc.cardemulation.host_apdu_service"
               android:resource="@xml/apduservice"/>
</service>

Таким образом, служба может быть запущена только путем привязки к ней с действием намерения android.nfc.cardemulation.action.HOST_APDU_SERVICE (или с явным намерением для вашего компонента службы). Более того, это может сделать только приложение, имеющее разрешение android.permission.BIND_NFC_SERVICE.

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

person Michael Roland    schedule 24.07.2014
comment
@ miron123 miron123 На самом деле, если ваша служба HCE будет привязана к платформе ‹ 19, она должна выйти из строя, поскольку класс HostApduService не будет частью платформы на этой платформе. - person Michael Roland; 24.07.2014