`
1140566087
  • 浏览: 547778 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18076
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309525
Group-logo
J2ME 基础学习课程集
浏览量:18008
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17195
社区版块
存档分类
最新评论

Android 之 ContentProvider手机簿使用

阅读更多
                                               
ContentProvider 简介


1.  介绍:四大组件之一,与Activity 和 Service 相同,使用前是需要注册的;

2.  作用:需要将自己的数据暴露给其他应用程序使用时,该程序就可以通过提供ContentProvider 来实现,其他的应用程序就可以通过ContentResolver 来操作Content Provider 暴露的数据; 开放了应用程序不需要启动,其他应用程序都可以操作开放的数据,包括增删该查;

3.  开发步骤:
    a)  继承Android 的 ContentProvider 基类实现自己的ContentProvider 类;
    b)  在主配置文件中注册,并制定以下信息:
        i.  Uri :  类似于访问中使用的URL 地址;
        ii. Uri 以content//: 固定开头,包括注册时指定的路径和资源;
        iii.    为每个Uri指定访问时需要返回的数据和其他操作;

4.  提示:应用程序使用ContentRsolver 通过ContentProvider 的Uri 访问开放的数据;

5.  案例 - ----  访问手机通讯簿
    a)  主表介绍:
        i.  Raw_contacts :这个表放的是联系人的唯一标识ID ,靠外键进行对应
        ii. Data: 存放的是具体的信息 ,各种数据
        iii.    Contacts: 这个表放的是一条条的联系人,主要存的是display_name,没有号码。
        iv. Calls 表: 存放的的呼叫记录;

6.  Uri:
    a)  管理联系人的Uri: ContactsContract.Contacts.CONTENT_URI
    b)  管理联系人电话的Uri:ContactsContract.CommonDataKinds.phone.CONTENT_URL
    c)  管理联系人Email 的 Uri:ContactsContract.CommonDataKinds.Email.CONTENT_URL


7.  使用通讯簿的权限:
    a)  <uses-permission android:name=”android.permission.READ_CONACTS”/>
    b)  <uses-permission.android:name=”android.permission.WRITE_CONTACTS”/>




下列代码演示如何获取手机通讯簿中的数据以及插入数据:
  <!-- 权限:用于读取系统通讯簿 -->


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

   

// 主程序代码
public class MainActivity extends Activity {

    private Button getInfo,add;
    
    // 程序入口
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        add = (Button) findViewById(R.id.add);
        getInfo = (Button) findViewById(R.id.getInfo);
        
        getInfo.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
                
                Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
                for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
                    int _id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));  // ID 编号
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 姓名
                    Toast.makeText(MainActivity.this,"编号:"+_id+"\n姓名:"+name , 1000).show();
                }
            }
        });
        
        add.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
                
                // 插入数据前必须先在 rawContactID 占一个空位
                ContentValues cv = new ContentValues();
                Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, cv); // 返回的是一个Uri
                
                // 解析出ID 的值 -- 占位的ID 值,记录标识的是属于哪一个人
                long rawContactID = ContentUris.parseId(rawContactUri);
                
                // 根据对应的ID 值,插入数据
                
                /* 插入姓名 */
                cv.clear();
                cv.put(Data.RAW_CONTACT_ID, rawContactID);
                /*  mimitype_id 字段,用于描述此数据的类型:姓名、电话号码、e_mail...  */
                cv.put(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
                cv.put(StructuredName.GIVEN_NAME, "xiaobaibai"); // 具体数据
                getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, cv);
                
                /* 向data表中插入电话数据 */
                cv.clear();
                cv.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactID);
                cv.put(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE);  // 号码的数据类型
                cv.put(Phone.NUMBER, "19915200");   // 号码
                cv.put(Phone.TYPE, Phone.TYPE_MOBILE); // 号码类型为手机号
                getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, cv);
                
                /* 向Data 中插入Email 数据 */
                cv.clear();
                cv.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactID); // 对应的ID 
                cv.put(ContactsContract.Contacts.Data.MIMETYPE,Email.CONTENT_ITEM_TYPE); // 数据类型
                cv.put(Email.DATA, "hao123@qq.com"); // 数据
                cv.put(Email.TYPE,Email.TYPE_WORK); // Email 类型,工作,家庭
                getContentResolver().insert(ContactsContract.Data.CONTENT_URI,cv);
			 }
        });
        
        
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics