UEventObserver监听文件状态的改变

823 阅读1分钟

同事写了个设备节点,需要监听里面的数据改动

frameworks/base/services/core/java/com/android/server/BatteryService.java 里面有个UEventObserver可以参考


        // watch for invalid charger messages if the invalid_charger switch exists
        if (new File("/sys/devices/virtual/switch/invalid_charger/state").exists()) {
            UEventObserver invalidChargerObserver = new UEventObserver() {
                @Override
                public void onUEvent(UEvent event) {
                    final int invalidCharger = "1".equals(event.get("SWITCH_STATE")) ? 1 : 0;
                    synchronized (mLock) {
                        if (mInvalidCharger != invalidCharger) {
                            mInvalidCharger = invalidCharger;
                        }
                    }
                }
            };
            invalidChargerObserver.startObserving(
                    "DEVPATH=/devices/virtual/switch/invalid_charger");
        }

或者DocObsever.java private static final String DOCK_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/dock";

        private final UEventObserver mObserver = new UEventObserver() {
238        @Override
239        public void onUEvent(UEventObserver.UEvent event) {
240            if (Log.isLoggable(TAG, Log.VERBOSE)) {
241                Slog.v(TAG, "Dock UEVENT: " + event.toString());
242            }
243
244            try {
245                synchronized (mLock) {
246                    setActualDockStateLocked(Integer.parseInt(event.get("SWITCH_STATE")));
247                }
248            } catch (NumberFormatException e) {
249                Slog.e(TAG, "Could not parse switch state from event " + event);
250            }
251        }
252    };

构造函数中 mObserver.startObserving(DOCK_UEVENT_MATCH);