如何在我的应用程序中设置android系统属性(使用setprop)时收到通知?

时间:2015-07-17 15:09:32

标签: java android adb javabeans propertychangelistener

我遇到了这个链接http://examples.javacodegeeks.com/core-java/beans/bean-property-change-event-listener/,其中有一个PropertyChangeListener示例。在我的应用程序中,我有一个实现runnable接口的Java Thread。我在开始时初始化了PropertyChangeSupport变量并注册了PropertyChangeListener。我的意图是,当我使用adb shell setprop设置属性说debug.xx.yyy时,我希望触发propertyChange函数调用。但它永远不会被触发。任何人都可以指出我哪里出错了?

以下是我的示例代码:

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
....

public class MyThread implements Runnable {

    public void run() {
        MyPropertyChangeSupport myPCS = new MyPropertyChangeSupport();
        myPCS.addMyPCS(new MyPCListener());
        ...
    }

    ...

    public class MyPropertyChangeSupport {
        private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

        public void addMyPCS(PropertyChangeListener listener) {
            pcs.addPropertyChangeListener("debug.xx.yyy", listener);
        }
    }

    public class MyPCListener implements PropertyChangeListener {
        public void propertyChange(PropertyChangeEvent evt) {
            try {
                int oldValue = (Integer) evt.getOldValue();
                int newValue = (Integer) evt.getNewValue();

                if (oldValue == newValue) {
                    Log.d(TAG, "Ignoring debug property set " + newValue);
                } else {
                    Log.d(TAG, "Got new value " +  newValue);
                    ...
                }
            } catch (ClassCastException e) {
                Log.e(TAG, "debug property does not have integer!");
                e.printStackTrace();
            } catch (NullPointerException e) {
                Log.e(TAG, "debug property read encountered NULL!");
                e.printStackTrace();
            }
        }
    }
}

0 个答案:

没有答案