ContentProvider再学习:注册观察者
来源:互联网 发布:plc编程会用到哪些函数 编辑:程序博客网 时间:2024/05/22 03:09
package cn.itcast.db.provider;import cn.itcast.db.MyDBOpenHelper;import cn.itcast.db.dao.PersonDBDao;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.util.Log;public class PersonProvider extends ContentProvider {// 创建了一个路径的识别器 uriMatcher 默认的返回值,如果没有找到匹配的类型 返回 -1;public static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);public static final int ALL_PERSONS = 1;public static final int PERSON = 2;public static final int HAHA =3;public static final int INSERT =4;public static final int DELETE =5;public static final int UPDATE =6;private static final String TAG = "PersonProvider";MyDBOpenHelper openHelper;Uri baseuri = Uri.parse("content://cn.itcast.db.personprovider");static {matcher.addURI("cn.itcast.db.personprovider", "persons", ALL_PERSONS);// 指定一个路径的匹配规则 //如果路径 满足 content://cn.itcast.db.provider/persons 返回值就是( ALL_PERSONS) 1 matcher.addURI("cn.itcast.db.personprovider", "person/#",PERSON );//如果路径 满足 content://cn.itcast.db.provider/person/10 返回值就是( PERSON) 2matcher.addURI("cn.itcast.db.personprovider", "haha", HAHA);matcher.addURI("cn.itcast.db.personprovider", "insert", INSERT);matcher.addURI("cn.itcast.db.personprovider", "delete", DELETE);matcher.addURI("cn.itcast.db.personprovider", "update", UPDATE);}/** * PeronProvder 内容提供者第一次被创建的时候 调用的方法 */@Overridepublic boolean onCreate() {openHelper = new MyDBOpenHelper(getContext());return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {int result = matcher.match(uri);switch (result) {// 符合 content://cn.itcast.db.provider/persons 代表的返回所有的数据 case ALL_PERSONS:PersonDBDao dao = new PersonDBDao(getContext());return dao.findAllbyCursor();//content://cn.itcast.db.provider/person/10case PERSON:long id = ContentUris.parseId(uri);SQLiteDatabase db = openHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor = db.query("person", null, "personid=?", new String[]{id+""}, null, null, null);return cursor;}case HAHA:Log.i(TAG,"我是haha对应的路径 ");break;default:throw new IllegalArgumentException("uri 不能被识别 ");}return null;}/** * 有的时候 我们需要知道内容提供者返回的数据类型 * 知道返回的数据 是一个集合呀 还是一个单独的条目 * * 有的时候 告诉调用者 返回的数据是什么样的类型 * mime的数据类型 */@Overridepublic String getType(Uri uri) {int result = matcher.match(uri);switch (result) {// 符合 content://cn.itcast.db.provider/persons 代表的返回所有的数据 case ALL_PERSONS:return "vnd.android.cursor.dir/people";//content://cn.itcast.db.provider/person/10case PERSON:return "vnd.android.cursor.item/people";default :return null;}}@Overridepublic Uri insert(Uri uri, ContentValues values) {// content://cn.itcast.db.provider/insertint result = matcher.match(uri);switch (result) {case INSERT:SQLiteDatabase db = openHelper.getWritableDatabase();db.insert("person", "personid", values);// 当数据发生改变的时候 getContext().getContentResolver().notifyChange(baseuri, null);return uri;default:throw new IllegalArgumentException("uri 不能被识别 ");}}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {int result = matcher.match(uri);switch (result) {case DELETE:SQLiteDatabase db = openHelper.getWritableDatabase();getContext().getContentResolver().notifyChange(baseuri, null);return db.delete("person", selection, selectionArgs);default:throw new IllegalArgumentException("uri 不能被识别 ");}}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {int result = matcher.match(uri);switch (result) {case UPDATE:SQLiteDatabase db = openHelper.getWritableDatabase();getContext().getContentResolver().notifyChange(baseuri, null);return db.update("person", values, selection, selectionArgs);default:throw new IllegalArgumentException("uri 不能被识别 ");}}}
package cn.itcast.other;import android.app.Activity;import android.content.ContentResolver;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Handler;public class OtherActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://cn.itcast.db.personprovider/"); // Cursor cursor = resolver.query(uri, null, null, null, null);// while (cursor!=null&& cursor.moveToNext()){// String name = cursor.getString( cursor.getColumnIndex("name"));// int age = cursor.getInt(cursor.getColumnIndex("age"));// System.out.println("姓名 "+ name +" 年龄 "+ age);// } // content://cn.itcast.db.personprovider // 注册了一个内容观察者 getContentResolver().registerContentObserver(uri, true , new MyObserver(new Handler())); } public class MyObserver extends ContentObserver{public MyObserver(Handler handler) {super(handler);}/** * 当内容观察者发现了数据发生改变的时候 调用的方法 */@Overridepublic void onChange(boolean selfChange) {System.out.println("数据发生改变了 ");super.onChange(selfChange);} }}
监听新短信:
package cn.itcast.smslistener;import android.app.Activity;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Handler;public class DemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Uri uri = Uri.parse("content://sms/"); getContentResolver().registerContentObserver(uri, true, new SmsObserver(new Handler())); } public class SmsObserver extends ContentObserver{public SmsObserver(Handler handler) {super(handler);}@Overridepublic void onChange(boolean selfChange) {System.out.println("有新的短信产生 ");Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"),null, null, null, null); while(cursor.moveToNext()){StringBuilder sb = new StringBuilder();sb.append("_id=").append(cursor.getInt(cursor.getColumnIndex("_id")));sb.append(",address=").append(cursor.getString(cursor.getColumnIndex("address")));sb.append(";body=").append(cursor.getString(cursor.getColumnIndex("body")));sb.append(";time=").append(cursor.getLong(cursor.getColumnIndex("date")));System.out.println(sb.toString());}super.onChange(selfChange);} }}遍历联系人和写入;联系人
package cn.itcast.contact;import android.content.ContentUris;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;public class TestContact extends AndroidTestCase {public void getAllContactInfo() throws Exception{String rawbase = "content://com.android.contacts/raw_contacts";String database = "content://com.android.contacts/data";Cursor cursor = getContext().getContentResolver().query(Uri.parse(rawbase), null, null, null, null);while (cursor.moveToNext()) {String id = cursor.getString( cursor.getColumnIndex("_id"));System.out.println("id ="+ id);Cursor datacursor = getContext().getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);while (datacursor.moveToNext()) {//String[] names = datacursor.getColumnNames();//for(int i =0;i<names.length;i++){//System.out.println(names[i]);//}String type = datacursor.getString(datacursor.getColumnIndex("mimetype"));System.out.println(type);if("vnd.android.cursor.item/email_v2".equals(type)){String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));System.out.println("邮箱 "+ data1);}else if("vnd.android.cursor.item/name".equals(type)){String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));System.out.println("姓名 "+ data1);}else if("vnd.android.cursor.item/phone_v2".equals(type)){String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));System.out.println("电话号码 "+ data1);}}datacursor.close();}cursor.close();}public void writeContact() throws Exception{String rawbase = "content://com.android.contacts/raw_contacts"; ContentValues values = new ContentValues(); Uri uri = getContext().getContentResolver().insert(Uri.parse(rawbase), values); //返回的raw_contact 表中的_id long id = ContentUris.parseId(uri); String database = "content://com.android.contacts/data"; ContentValues nameValues = new ContentValues(); nameValues.put("mimetype", "vnd.android.cursor.item/name"); nameValues.put("data1", "wangwu"); nameValues.put("raw_contact_id", id); getContext().getContentResolver().insert(Uri.parse(database), nameValues); ContentValues phoneValues = new ContentValues(); phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2"); phoneValues.put("data1", "999999"); phoneValues.put("raw_contact_id", id); getContext().getContentResolver().insert(Uri.parse(database), phoneValues); ContentValues emailValues = new ContentValues(); emailValues.put("mimetype", "vnd.android.cursor.item/email_v2"); emailValues.put("data1", "wangwu@sina.cn"); emailValues.put("raw_contact_id", id); getContext().getContentResolver().insert(Uri.parse(database), emailValues);//qq 同步助手// 号簿管家 -> 文件 -> 上传服务器 // pim 90多字段 体力活 }}
- ContentProvider再学习:注册观察者
- 内容观察者(针对contentprovider)
- Contentprovider学习
- 学习ContentProvider
- ContentProvider 学习
- ContentProvider学习
- ContentProvider学习
- ContentProvider学习
- 学习 ContentProvider
- ContentProvider学习
- 自定义注册内容观察者
- android注册内容观察者
- Android 注册内容观察者
- ContentProvider和Observable 以及观察者模式
- 四大组件之ContentProvider(内容观察者)&数据库
- Android ContentProvider之ContentObserver内容观察者
- android注册内容观察者_smsListen
- ContentObserver回调与ContentProvider注册notifychange
- as3 学习心得
- 黑马程序员_多线程(上)
- SlickEdit 婀娜多姿之初窥
- 文档之“精髓”
- Python 3.2 的程序转换成exe的总结
- ContentProvider再学习:注册观察者
- 匈牙利算法
- flume ng 1.3 安装配置方法
- 学习日记:如何写Makefile(一)
- 一个找了很久的API函数---GetSystemPowerStatus
- 黑马程序员_多线程(下)
- LCD 调试总结
- sql server数据库备份
- ViewPager,ActionBar,Fragment应用--模仿通讯录滑动效果