观察者

在内容提供者的基础上,若有数据放生变化,则通知其他应用

package com.shz.observer;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends Activity {

    public static final String TAG = "testobserver";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //Uri uri = Uri.parse("content://db.personprovider/insert");
        Uri uri = Uri.parse("content://db.personprovider/");
        this.getContentResolver().registerContentObserver(uri, true,new MyObserver(null));
    }

    private class MyObserver extends ContentObserver
    {

        public MyObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            Uri uri = Uri.parse("content://db.personprovider/query");
            ContentResolver resolver = getApplicationContext().getContentResolver();
            Cursor c = resolver.query(uri, null, null, null, "id desc");
            
            if(c.moveToFirst())
            {
                Log.i(TAG, "插入的新记录name:"+c.getString(c.getColumnIndex("name")));
            }
            else
            {
                Log.i(TAG, "未监听到A应用的数据发生改变");
            }
        }
        
        
        
    }
}
原文地址:https://www.cnblogs.com/shaomenghao/p/3905767.html