我有一个HCE服务,它向NFC读取器发送数据,但我想知道是否可以指定服务的启动设置。我希望指定只有在应用程序运行时才能调用我的服务。如果应用程序已关闭,则不应调用该服务。这是可能的,还是它的目的是服务总是可以被调用?
发布于 2014-08-10 08:16:40
目前,您只能指定是否应该考虑从锁定屏幕中进行卡模拟,或者只有当用户通过锁定屏幕时才能指定(请参阅这里 )。不可能(直接)指定只有在应用程序的活动处于前台时才使用HCE服务。
使用服务作为HCE事件的目标(而不是像其他NFC事件那样的活动)的整个想法是,HCE功能应该在任何时候都可以访问,并且不需要活动处于前台。
要限制HCE服务的可用性,您可以做的是在应用程序的共享首选项中设置一个标志(请参阅这个问题,为什么共享首选项将是首选方法),以指示服务是否允许执行某些操作。然后,您可以在HCE服务中查询该标志,并决定在HCE上应该提供哪些功能。
或者,您可以禁用整个服务组件(请参阅此问题/回答),并且只在活动处于前台时启用该服务:
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服务仍然响应某些命令(例如,应用程序选择等)。而且您只会阻止与安全/隐私相关的命令。
https://stackoverflow.com/questions/25176181
复制相似问题