【发布时间】:2018-07-06 22:17:17
【问题描述】:
我有一个 HCE 服务,可以向 NFC 读取器发送数据,但我想知道是否可以指定我的服务的启动设置。我想指定只有在应用程序正在运行时才能调用我的服务。 如果应用程序关闭,则不应调用该服务。这是可能的,还是打算始终调用该服务?
【问题讨论】:
标签: android android-service nfc access-control hce
我有一个 HCE 服务,可以向 NFC 读取器发送数据,但我想知道是否可以指定我的服务的启动设置。我想指定只有在应用程序正在运行时才能调用我的服务。 如果应用程序关闭,则不应调用该服务。这是可能的,还是打算始终调用该服务?
【问题讨论】:
标签: android android-service nfc access-control hce
目前,您只能指定 HCE 服务是否应考虑从锁定屏幕进行卡模拟,或者仅当用户通过锁定屏幕时(请参阅here。不能(直接)指定 HCE 服务仅应在您的应用的 Activity 处于前台时使用。
使用服务作为 HCE 事件的目标(而不是像其他 NFC 事件那样的活动)背后的整个想法是,HCE 功能应该随时可以访问,并且不需要活动在前台。
限制 HCE 服务可用性的方法是在应用的共享首选项中设置一个标志(请参阅 this question,了解为什么共享首选项是首选方法),指示是否允许该服务执行某些行动与否。然后,您可以在 HCE 服务中查询该标志,并决定 HCE 应该提供哪些功能。
或者,您可以禁用整个服务组件(请参阅此question/answer)并仅在您的活动处于前台时启用该服务:
public void onResume() {
super.onResume();
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, "com.example.app.HceService"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
public void onPause() {
super.onPause();
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, "com.example.app.HceService"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
请注意,我建议您的 HCE 服务仍然响应某些命令(例如应用程序选择等),并且您只阻止安全/隐私相关的命令。
【讨论】: