ContentObserver监听短信数据库,可是一旦注册的服务或者Activity被杀死这个也就失效了。
有什么办法让这个监听程序不死亡的啊?而且用服务注册有个大问题:
ContentResolver resolver = getContentResolver();
observer = new SmsReceiver(mHandler,resolver);

这个mHandler无法获取,为了减小Service服务占的内存,我放在了其他的Activity里面去了。

解决方案 »

  1.   

    LZ可以自己写一个类来专门监听数据库中短信的变化package xx.xxx.xxxxx;import android.content.Context;
    import android.database.ContentObserver;
    import android.os.Handler;
    import android.os.Message;public class NewMessageContentObserver extends ContentObserver {
        ......
        private boolean mIsUpdate = false;
        private final static int UPDATE_START = 0x1000;
        private final static int DELAY_TIME = 1500;
        public static int sTempMessageCount;
        public static int sNewMessageCount;    public NewMessageContentObserver(Context context, Handler handler) {
            super(handler);
            mContext = context;
        }    @Override
        public boolean deliverSelfNotifications() {
            return super.deliverSelfNotifications();
        }    @Override
        public void onChange(boolean selfChange) {
            mUpdate.removeMessages(UPDATE_START);
            mUpdate.sendEmptyMessageDelayed(UPDATE_START, DELAY_TIME);
            if (xxxxx) {
                mIsUpdate = true;
            }    }    private final Handler mUpdate = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case UPDATE_START:
                    sNewMessageCount = Utilities.getNewMessageCount(mContext);
                    if (sNewMessageCount != sTempMessageCount) {
                        new Thread(new Runnable() {
                            public void run() {
                                sTempMessageCount = sNewMessageCount;
                                if (xxxx) {
                                    mIsUpdate = true;
                                } else  {
                                    mIsUpdate = false;
                                    mContext.updateNewMessage();
                                }
                            }
                        }).start();
                    }
                    break;
                default:
                    break;
                }
            }
        };
        public boolean getIsUpdate() {
            return mIsUpdate;
        }
        
        public void setIsUpdate(boolean isUpdate) {
            mIsUpdate = isUpdate;
        }
    }