1

我有一个奇怪的问题。我想知道如果设备 sdk 小于所需的 Kitkat sdk,我是否可以阻止 hce 功能/服务?目前我在我的应用程序启动时停止了我的 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);
            }

它就像一种魅力,但我只是不相信我应该这样做。我现在的问题是:如果设备 sdk 错误,我可以阻止 HCE 功能吗?或者如果我使用 HCE,我的设备是否需要 >=Kitkat?

4

1 回答 1

0

没有理由在平台版本 < 19 上停止您的 HCE 服务。如果您的 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 之前的平台,既不知道该意图也不知道该许可,它不会导致您的服务启动。

于 2014-07-24T11:57:42.580 回答