报错org.cocos2dx.lib.Cocos2dxHelper.unregisterBatteryLevelReceiver
稳定的复现方法:从应用市场打开游戏,回到桌面,再从桌面点击游戏icon 热启动游戏,
过两三秒闪退。 分析了奔溃日志,发现错误集中在某几个平台,且同一手机上,有的渠道的包有这个问题,有的没有,可以确定是打出来的包的问题。

修改Cocos2dxHelper文件,确保所有调用 registerBatteryLevelReceiver 和 unregisterBatteryLevelReceiver 的逻辑。路径在这

ccbuild/jsb-default/frameworks/cocos2d-x/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java

改成这样

public class Cocos2dxHelper {
    private static boolean isBatteryLevelReceiverRegistered = false;
    // 其他代码保持不变
}

//然后改函数
    static void registerBatteryLevelReceiver(Context context) {
        if (!isBatteryLevelReceiverRegistered) {
            Intent intent = context.registerReceiver(sBatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
            sBatteryReceiver.setBatteryLevelByIntent(intent);
            isBatteryLevelReceiverRegistered = true;
        }
    }

    static void unregisterBatteryLevelReceiver(Context context) {
        if (isBatteryLevelReceiverRegistered) {
            try {
                context.unregisterReceiver(sBatteryReceiver);
                isBatteryLevelReceiverRegistered = false;
            } catch (IllegalArgumentException e) {
                // Ignore the exception if the receiver is not registered
            }
        }
    }

直接修改原生的 Cocos2dxHelper 文件,可以修复重复调用 unregisterBatteryLevelReceiver 导致的 Receiver not registered 异常。

firebase事件,打点调试模式。
https://firebase.google.com/docs/analytics/debugview?hl=zh-cn

标签: none

添加新评论