gpt4 book ai didi

android - 我可以阻止主机卡仿真服务被选择的 AID 触发吗?

转载 作者:行者123 更新时间:2023-11-29 00:17:39 26 4
gpt4 key购买 nike

我有一个 Android 应用程序,其中一个服务注册到 Android beam,一个服务注册到主机卡模拟。我想决定何时在代码中启用/禁用 HCE 服务。 list 中的 HCE 服务如下所示 -

<service
android:name="com.bimo.verifonewallet.service.MyHostApduService"
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>

实际上,当智能手机接收到选择AID命令(带有服务AID)时,服务被触发并执行服务的onCreate()函数,事务完成后调用onDestroy()函数.

因此,当我从主 Activity 执行 startService() 和 stopService() 时,它没有任何效果。

是否可以控制服务是否被调用?

最佳答案

您可以尝试1 禁用整个服务组件(参见 question/answer )并且仅在您的 Activity 在前台时启用该服务:

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 服务(使用上述方法)可能会允许另一个应用程序(无论是否恶意)接管您的 AID 的通信。


1) 在创建和更新 HCE 服务列表时,我没有检查 Android 源代码。因此,HCE 服务列表(NFC 系统服务已知)可能不会在每次 setComponentEnabledSetting() 调用时更新。

关于android - 我可以阻止主机卡仿真服务被选择的 AID 触发吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com