Capacitor Android插件重写onResume/onPause无效 无法抑制NFC检测自动触发
核心问题原因
- Capacitor 自定义Plugin默认不会自动接收Activity的生命周期回调,你当前重写的
onResume、onPause方法根本没有被触发,所以配置不生效。 - 你当前调用的
AndroidConfigManager.stopDetection(getActivity())方法实际作用是启用NFC检测(从你给出的日志输出NFC Detection Enabled可以判断方法名与实际逻辑相反),如果不对逻辑做标记控制,每次执行都会重新开启NFC。
解决方案
1. 注册生命周期监听
在Plugin的load回调中绑定Activity生命周期,让你重写的onResume/onPause能够正常执行。
2. 添加状态标记位
新增自定义状态变量,按需控制NFC检测的启停状态,避免每次回到前台都强制触发逻辑。
3. 修正方法调用逻辑
根据SDK实际作用调整启停方法的调用,避免方法名和实际效果反向的问题。
修改后的完整代码如下:
public class ExamplePlugin extends Plugin implements IDetectCardCallback, IITSOFrameworkCallback, ITransactionControllerCallback { private Application app; private Context context; // NFC检测状态标记,可根据业务需求设置初始值 private boolean shouldEnableNfcDetection = false; // 重写load方法注册生命周期监听 @Override public void load() { super.load(); // 绑定Activity生命周期回调,之后onResume、onPause才会被触发 bridge.registerActivityLifecycleCallbacks(this); } public void echo(PluginCall call) { String value = call.getString("value"); app = getActivity().getApplication(); context = getContext(); AndroidConfigManager.initialise(app); // 按需修改状态标记 shouldEnableNfcDetection = true; AndroidConfigManager.stopDetection(getActivity()); } // 对外暴露控制NFC的方法,供JS端按需调用 @PluginMethod public void toggleNfcDetection(PluginCall call) { boolean enable = call.getBoolean("enable", false); shouldEnableNfcDetection = enable; if (enable) { // 实际启用NFC的方法,根据你的日志输出,当前stopDetection是启用逻辑 AndroidConfigManager.stopDetection(getActivity()); } else { // 替换为SDK实际提供的NFC停用方法 AndroidConfigManager.startDetection(getActivity()); } call.resolve(); } @Override public void onResume(){ super.onResume(); // 根据状态标记决定NFC逻辑,不需要启用就主动调用停用方法 if (shouldEnableNfcDetection) { AndroidConfigManager.stopDetection(getActivity()); } else { AndroidConfigManager.startDetection(getActivity()); } } @Override public void onPause(){ super.onPause(); // 按需处理后台逻辑,比如后台要停用NFC就执行对应方法 if (!shouldEnableNfcDetection) { AndroidConfigManager.startDetection(getActivity()); } } }
注意事项
- 请确认
AndroidConfigManager中启停NFC的方法定义,你当前的stopDetection实际触发启用逻辑,大概率是方法名定义反向,要根据SDK的实际接口说明调整对应调用。 - 如果底层ITSO框架本身默认会在Activity resume时自动启动NFC检测,上述代码中
onResume的主动停用逻辑可以直接覆盖框架的默认行为。
内容的提问来源于stack exchange,提问作者uneasy
相关产品推荐
相关产品推荐

