android四大组件简述之contentprovider,Android 四大组件学习之ContentProvider四

上节我们学习了怎样去读取系统短信以及插入一条短信到系统中。 本节我们学习怎样获取系统的联系人,以及插入一条联系人

好。废话不多说了,直接操作。

首先和读取短信一样,先找到联系人在数据库中的位置。

gGdXnM2YJ4

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

然后导出,查看数据库中的内容

gGdXnM2YJ4

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上图就是怎样到数据库中找打系统的联系人数据,(看起来图画的有点乱,希望能看懂吧)

既然知道怎样能到系统的数据库找到数据。那我们就開始写代码实现吧:

public class ReadContactActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_readcontact);

}

public void readContact(View v)

{

ContentResolver cr = getContentResolver();

/*

* 先到raw_contacts表中拿到contact_id

* content://com.android.contacts/raw_contacts是raw_contacts的訪问url

* */

Cursor contactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);

while(contactId.moveToNext())

{

/*

* 拿到contact_id接着到data表中去依据raw_contact_id获取mimetype_id和data1数据

* */

String id = contactId.getString(contactId.getColumnIndex("contact_id"));

/**

* "content://com.android.contacts/data"是訪问data表的url

* 通过id也就是contact_id去data表中找,data1, raw_contact_id, mimetype_id.

* 可是, id就是raw_contact_id,所以就不用再找了。

而mimetype_id因为Android系统为我们自己优化了一些细节。当你在data表中找mimetype_id是找不到的

* android系统直接将mimetype_id转变为找mimetype了

*/

Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"),

new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{id}, null);

String email = null, phone = null, name = null;

while(contactData.moveToNext())

{

String data1 = contactData.getString(contactData.getColumnIndex("data1"));

String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));

/*假设mimetype是邮箱*/

if("vnd.android.cursor.item/email_v2".equals(mimetype))

{

email = data1;

}//假设mimetype是电话

else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {

phone = data1;

}//假设mimetype是名字

else if ("vnd.android.cursor.item/name".equals(mimetype)){

name = data1;

}

}

Log.i("ReadContactActivity", id + ';' + name + ";" + phone + ";" + email);

}

}

}

打印结果为:

236a2214eaf0882732f7badd015b6157.png

上图就是怎样获取联系人的操作。

注意: 读取联系人,短信等信息都须要加上权限的:

38fc64fbf7000a71bb3f32560e788c46.png

既然知道怎样从系统中获取联系人。那就应该会为系统插入一条联系人的记录。

接下来我们实现为系统插入一条联系人记录

Activity的插入的代码:

public void insertContact(View v)

{

ContentResolver cr = getContentResolver();

Cursor cursor = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);

/*假设数据库中没有数据,则插入的就是第一条数据*/

int contactId = 1;

if(cursor.moveToLast())

{

/*假设有数据,就插入到最新的写一条*/

int id = cursor.getInt(cursor.getColumnIndex("_id"));

contactId = id + 1;

}

ContentValues values = new ContentValues();

/*将新的id插入到raw_contacts表中*/

values.put("contact_id", contactId);

cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);

/*插入名字*/

values.clear();

values.put("data1", "erlangsheng");

values.put("mimetype", "vnd.android.cursor.item/name");

values.put("raw_contact_id", contactId);

cr.insert(Uri.parse("content://com.android.contacts/data"), values);

/*插入电话*/

values.clear();

values.put("data1", "00189890");

values.put("mimetype", "vnd.android.cursor.item/phone_v2");

values.put("raw_contact_id", contactId);

cr.insert(Uri.parse("content://com.android.contacts/data"), values);

}

}

结果为:

4ab7510c8802420ae1aa9d094e918d03.png

以上就是给联系人插入一条记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值