ContentProvider
程序通过uri访问数据继承contentprovider实现一系列对于数据的增删改查等方法,需在AndroidMainfest中完成对于ContentProvider的注册 onCreate方法,在创建后被调用 onDelete方法,根据Uri删除selection指定的条件所匹配的全部记录 insert,根据uri插入Values对应的数据 update,根据uri修改selection指定的条件所匹配的全部记录 query,根据uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询什么列, gettype返回当前uri的mime类型,如果该uri对应的数据可能包括的多条记录,那么mime类型的字符串,就是以vnd.android.dir/开头,如果该url对应的数据只有一条记录,该mime类型字符串,就是以vndAndroid.cursor.item/开头UriMatcher类
uriMatcher matcher= new UriMatcher(UriMatcher.No_MATCH);UriMatcher.No_MATCH表示不匹配任何路径的返回码 matcher.addURI("com.imooc.provider","music",1);往UriMatcher类里添加一个拼凑的UriUriMatcher作为一个Uri的容器,容器里包含着我们即将要操作的Uri如果通过match方法匹配成功后就返回code值matcher.match(uri)首先找到通过addURI方法添加进来的Uri匹配匹配成功则返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1)
ContentResolver类
外部应用通过ContentResolver类来对ContentProvider中的数据进行添加、删除、查询
调用getContentResolver()方法来获取ContentResolver对象
import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.RawContacts;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //在联系人中插入数据 //获取ContentResolver对象,找到指定的ContentProvider,并获取ContentProvider的数据 ContentResolver cr=getContentResolver(); ContentValues contentValues=new ContentValues(); //返回所要寻找文件的Uri Uri uri=cr.insert(RawContacts.CONTENT_URI,contentValues); Long raw_content_id= ContentUris.parseId(uri); contentValues.clear(); //插入人名 contentValues.put(StructuredName.RAW_CONTACT_ID,raw_content_id); contentValues.put(StructuredName.DISPLAY_NAME,"zhangsan"); contentValues.put(StructuredName.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE); uri=cr.insert(ContactsContract.Data.CONTENT_URI,contentValues); //插入电话信息 contentValues.clear(); contentValues.put(Phone.RAW_CONTACT_ID,raw_content_id); contentValues.put(Phone.NUMBER,"1333333333"); contentValues.put(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE); uri=cr.insert(ContactsContract.Data.CONTENT_URI,contentValues); }}