You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Capacitor Android插件重写onResume/onPause无效 无法抑制NFC检测自动触发

核心问题原因

  1. Capacitor 自定义Plugin默认不会自动接收Activity的生命周期回调,你当前重写的onResume、onPause方法根本没有被触发,所以配置不生效。
  2. 你当前调用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:00:03