美文网首页
Android ContentProvider

Android ContentProvider

作者: 百里漫步 | 来源:发表于2017-10-25 10:02 被阅读0次

    如何实现 ContentProvider?

    1. 继承抽象类 ContentProvider 实现一系列针对于数据的增删改查等方法;
    2. 需在 AndroidManifest.xml 中完成对 ContentProvider的注册。
      <provider
      android:name="com.imooc.MusicProvider"
      android:authorities="com.provider.music" ></provider>
      注:注册的anthorities的属性值,是全局唯一的。

    第三方的访问能力完全取决于你自定义的ContentProvider,如果定义的ContentProvider只实现查询功能,那么第三方程序就只能做查询的操作,不能做其他的操作。

    继承 ContentProvider 之后实现的几个方法:
    onCreate() :在ContentProvider创建后使用。
    Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):根据Uri查询selection指定的条件所匹配的全部记录,并且可以指定查询哪些字段、以什么方式排序。
    insert(Uri uri, ContentValues values):根据Uri插入values对应的数据。
    delete(Uri uri, String selection, String[] selectionArgs):根据Uri删除selection指定的条件所匹配的全部记录。
    update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs):根据Uri修改selection指定的条件所匹配的全部记录。
    比较值得注意的如下:
    getType(Uri uri):返回当前Uri的 MIME 类型。
    如果当前的Uri包含多条记录,那么 MIME 类型字符串就以 vnd.android.dir/ 开头。
    如果该Uri对应的数据只有一条记录,那么 MIME 类型字符串就以 vnd.android.cursor.item/ 开头


    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

    MainActivity.java

    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);
           values.clear();
           //插入人名
           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);
        }
        
    }
    
    

    MainActivity.java

    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.CommonDataKinds.Email;
    import android.provider.ContactsContract.Contacts;
    import android.util.Log;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ContentResolver cr = getContentResolver();
            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")));
                    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();
            }
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:Android ContentProvider

          本文链接:https://www.haomeiwen.com/subject/ivutpxtx.html