Android攻城狮的第二门课(第3季)第4章 四大组件之ContentProvider
2017-08-24 15:11
381 查看
本章讲解Android中四大组件之一的ContentProvider,以及怎样通过contentProvider来实现进程间的数据共享功能
Android的四中数据存储方法:
1、SharedPreferences
2、SQLite
3、File
4、其他网络存储等
以上不可完成的任务(程序应用间的数据传递,跨程序处理数据)
都只是在单独的一个应用程序之中达到一个数据的共享。
通过的Uri访问实现增、删、该、查。
content:// 前缀表明数据受控于一个内容提供者。从不修改
com.imooc.provider 唯一标识 在AndroidMainfest.xml中注册
music 具体操作哪个条目
具体操作哪个条目下的哪个记录
ContentProvider数据分享
自己要些一个ContentProvider
查询联系人的id和姓名
(1)查询联系人
(2)增加联系人
(3)短信的读取
(4)通话记录
(5)多媒体 (图片,视频,音频)
记得给AndroidMainfest.xml加权限
Android的四中数据存储方法:
1、SharedPreferences
2、SQLite
3、File
4、其他网络存储等
以上不可完成的任务(程序应用间的数据传递,跨程序处理数据)
都只是在单独的一个应用程序之中达到一个数据的共享。
通过的Uri访问实现增、删、该、查。
url是指通用资源标志符
content://com.imooc.provider/music/#content:// 前缀表明数据受控于一个内容提供者。从不修改
com.imooc.provider 唯一标识 在AndroidMainfest.xml中注册
music 具体操作哪个条目
具体操作哪个条目下的哪个记录
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH) UriMatcher.NO_MATCH //表示不匹配任何路径的返回码 match.addURI("com.imooc.provider","music",1); //匹配成功返回code值
ContentProvider数据分享
自己要些一个ContentProvider
package com.imooc.li806.ontentproviderdemo1; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; /** * Created by li806 on 2017/8/24. */ public class MyContentProvider extends ContentProvider { /比如你实现了增和删,第三方程序的能力只受限于你的ContentProvider。 @Override //在ContetnProvider创建后被调用 public boolean onCreate() { return false; } @Nullable @Override //根据uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询哪些列 以什么方式(order)排序 public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { return null; } @Nullable @Override //返回当前uri的MIME类型,如果该URI对应的数据可能包括多条记录 //那么MIME类型字符串 就是以vnd.android.dir/开头 // 如果该URI对应的数据只有一条记录 该MIME类型字符串 就是以vnd.android.cursor.item/开头 public String getType(@NonNull Uri uri) { return null; } @Nullable @Override //根据Uri插入Values对应的数据 public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { return null; } @Override //根据Uri删除selection指定的条件所匹配的全部记录 public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } @Override //根据uri修改select d0b1 ion指定的条件所匹配的全部记录 public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } }
查询联系人的id和姓名
package com.imooc.li806.ontentproviderdemo1; import android.content.ContentResolver; import android.database.Cursor; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.Contacts; public class MainActivity extends AppCompatActivity { //作用:查询系统联系人 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //使用系统提供好的ContentResolver ContentResolver cr = getContentResolver(); //uri:Contacts.CONTENT_URI //new String[] { Contacts._ID, Contacts.DISPLAY_NAME } 查询哪些列。 Cursor c = cr.query(Contacts.CONTENT_URI, new String[] { Contacts._ID, Contacts.DISPLAY_NAME }, null, null, null); if (c != null) { while (c.moveToNext()) { int id = c.getInt(c.getColumnIndex("_id")); Log.i("info", "_id:" + id); Log.i("info", "name:" + c.getString(c.getColumnIndex("display_name"))); //取号码 Phone.NUMBER 号码 Phone.TYPE 号码类型 //游标 Cursor c1 = cr.query(Phone.CONTENT_URI, new String[] { Phone.NUMBER, Phone.TYPE }, Phone.CONTACT_ID + "=" + id, null, null); // 根据联系人ID查询出联系人的电话号码 if (c1 != null) { while (c1.moveToNext()) { int type = c1.getInt(c1.getColumnIndex(Phone.TYPE)); if (type == Phone.TYPE_HOME) { Log.i("info", "家庭电话:" + c1.getString(c1.getColumnIndex(Phone.NUMBER))); } else if (type == Phone.TYPE_MOBILE) { Log.i("info", "手机:" + c1.getString(c1.getColumnIndex(Phone.NUMBER))); } } c1.close(); } // 根据联系人的ID去查询出联系人的邮箱地址 Cursor c2 = cr.query(Email.CONTENT_URI, new String[] { Email.DATA, Email.TYPE }, Email.CONTACT_ID + "=" + id, null, null); if (c2 != null) {//一个人可能多个邮箱 while (c2.moveToNext()) { int type = c2.getInt(c2.getColumnIndex(Email.DATA)); if (type == Email.TYPE_WORK) { Log.i("info", "工作邮箱:" + c2.getString(c2.getColumnIndex(Email.DATA))); } } c2.close(); } } c.close(); } } }
给通讯录中添加联系人
系统提供的ContentProvider(1)查询联系人
(2)增加联系人
(3)短信的读取
(4)通话记录
(5)多媒体 (图片,视频,音频)
package com.imooc.contentproviderdemo2; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr = getContentResolver(); //向联系人中 插入一行数据 ContentValues values = new ContentValues(); Uri uri = cr.insert(RawContacts.CONTENT_URI, values); Long raw_contact_id = ContentUris.parseId(uri); //解析uri values.clear();//清空values //插入人名 values.put(StructuredName.RAW_CONTACT_ID, raw_contact_id); values.put(StructuredName.DISPLAY_NAME, "张三三"); values.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//插入的数据类型 uri = cr.insert(Data.CONTENT_URI, values); //插入电话信息 values.clear(); values.put(Phone.RAW_CONTACT_ID,raw_contact_id); values.put(Phone.NUMBER,"13333333333"); values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);//数据类型 uri = cr.insert(Data.CONTENT_URI, values); } }
记得给AndroidMainfest.xml加权限
<uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.READ_CONTACTS"/>
相关文章推荐
- Android攻城狮的第二门课(第3季)第5章 四大组件之BroadcastReceiver
- android四大组件--ContentProvider详解
- Android四大组件之一之内容提供者ContentProvider
- Android四大组件之ContentProvider自定义
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- 初学android:四大组件之contentprovider
- Android之四大组件之一-ContentProvider内容提供者的使用(二)
- 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider
- Android四大组件之内容提供者--ContentProvider
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android基础之四大组件-ContentProvider(内容提供者)
- Android笔记(五十四) Android四大组件之一——ContentProvider(一)
- Android学习-四大组件(ContentProvider)
- Android 四大组件之ContentProvider
- Android四大组件之ContentProvider
- 【Android基础】(4)四大核心组件之ContentProvider
- android开发步步为营之34:四大组件之ContentProvider
- Android的四大组件之ContentProvider(对外程序共享数据)
- Android四大组件(三) ContentProvider
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)