你可以试试
一
禁用整个服务组件(请参见
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服务
仍然响应某些命令
(特别是应用程序选择)并且您只阻止与安全/隐私相关的命令。例如,您可以通过在应用程序的共享首选项中设置标志来执行此操作(请参见
this question
关于共享首选项为何会成为首选方法),指示是否允许服务执行某些操作。然后,您可以在HCE服务中查询该标志,并决定HCE上应该提供哪些功能。
还要记住,完全禁用HCE服务(使用上述方法)可能会允许另一个应用程序(无论是否恶意)接管您的帮助通信。
一
)当HCE服务列表被创建和更新时,我还没有检查Android源代码。因此,在这种情况下,HCE服务列表(NFC系统服务已知)可能不会在每个
setComponentEnabledSetting()
打电话来。