package com.secondworld.univeralsdk; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 2018/7/15 0015. */ public class BatteryUtil { private static BatteryUtil s_Instance = null; public static BatteryUtil getInstance() { if (s_Instance == null) { s_Instance = new BatteryUtil(); } return s_Instance; } private BatteryBroadCastReceiver m_BatteryBroadCastReceiver; private BatteryUtil() {} public void start(Context context) { m_BatteryBroadCastReceiver = new BatteryBroadCastReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); context.registerReceiver(m_BatteryBroadCastReceiver, filter); } public void stop(Context context) { if (m_BatteryBroadCastReceiver != null) { try{ context.unregisterReceiver(m_BatteryBroadCastReceiver); m_BatteryBroadCastReceiver = null; }catch (IllegalArgumentException e) { if (!e.getMessage().contains("Receiver not registered")) { throw e; } } } } private class BatteryBroadCastReceiver extends BroadcastReceiver { private int m_BatteryLevel; private int m_Status; public BatteryBroadCastReceiver() { m_BatteryLevel = 0; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) { int _batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); Map _msg = new HashMap<>(); if (_batteryLevel != m_BatteryLevel) { try { _msg.put("code", CodeA2U.BatteryLevel); _msg.put("level", _batteryLevel); UniversalUtil.sendMessageToUnity(_msg); m_BatteryLevel = _batteryLevel; } catch (Exception e) { e.printStackTrace(); } } int _status = intent.getIntExtra("status", 0); if (_status != m_Status) { _msg.clear(); int _transCode = 0; if (_status == BatteryManager.BATTERY_STATUS_CHARGING) { _transCode = 2; } else if (_status == BatteryManager.BATTERY_STATUS_NOT_CHARGING || _status == BatteryManager.BATTERY_STATUS_DISCHARGING) { _transCode = 1; } else if (_status == BatteryManager.BATTERY_STATUS_FULL) { _transCode = 3; } _msg.put("code", CodeA2U.BatteryCharging); _msg.put("status", _transCode); UniversalUtil.sendMessageToUnity(_msg); m_Status = _status; } } } } }