博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 四大组件学习之ContentProvider四
阅读量:6902 次
发布时间:2019-06-27

本文共 3180 字,大约阅读时间需要 10 分钟。

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

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

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

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

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

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

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); } } }

打印结果为:

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

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

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

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

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);				}}
结果为:

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

你可能感兴趣的文章
在Angularjs中使用directive自定义指令实现attribute的继承
查看>>
新手学习编程的最佳方式是什么
查看>>
程序员零起步(四)——实习
查看>>
day6
查看>>
Aix下如何运行Java程序
查看>>
js简单总结
查看>>
隐马尔可夫HMM中viterbi算法
查看>>
ospf 协议配置方法及实例
查看>>
Python:解决中文字符串问题
查看>>
python模块之xml
查看>>
那些在学习iOS开发前就应该知道的事
查看>>
python多线程--Condition(条件对象)
查看>>
c++汉诺塔相关知识总结1
查看>>
Gym 100169A 最短路
查看>>
android 中activity调用本地service中的方法。
查看>>
强制IE浏览器或WebBrowser控件使用指定版本显示网页(转发)
查看>>
OJDBC版本区别
查看>>
中国网建之SMS
查看>>
《SQL 进阶教程》 case:练习题1-1-2 转换行列——在表头里加入汇总列
查看>>
展讯NAND Flash高级教程【转】
查看>>