同事写了个设备节点,需要监听里面的数据改动
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);