收听HCE(基于主机的卡仿真)事件

时间:2016-04-04 12:18:12

标签: android nfc hce

每次用户使用基于主机的卡片仿真(HCE)开始NFC交易时,我都需要启动我的应用程序。

我不需要管理互动。我不需要来自阅读器或NFC模拟器的任何数据。我无法控制使用该服务的应用程序。我只需要知道手机是否接近NFC读卡器。

是否有一种简单的方法可以在不干扰其他应用的情况下监听通用系统事件或通知?

1 个答案:

答案 0 :(得分:1)

不,Android不发送任何通知,例如"嘿,有一些应用程序刚刚在HCE"上激活。因此,您无法在应用中获得此类活动。具体而言,它不可能监控您的设备上是否已通过HCE激活任何现有的HCE应用程序(您无法控制)。

您可以做的是创建自己的HCE服务(为您的特定应用程序AID注册)。然后,此HCE服务可以在收到事务时启动活动(另请参阅How can I send message from HostApduService to an activity?):

public class MyHostApduService extends HostApduService {
    @Override
    public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
        if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) {
            // SELECT by AID
            Intent intent = new Intent(this, MyActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

            return new byte[]{ (byte)0x90, (byte)0x00 }
        } else {
            return new byte[]{ (byte)0x6D, (byte)0x00 }
        }
    }
}