别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述Android 四大组件学习之ContentProvider四相关的知识,希望能为你提供帮助。
上节我们学习了怎样去读取系统短信以及插入一条短信到系统中。 本节我们学习怎样获取系统的联系人,以及插入一条联系人
好。废话不多说了,直接操作。
首先和读取短信一样,先找到联系人在数据库中的位置。
文章图片
然后导出,查看数据库中的内容
文章图片
上图就是怎样到数据库中找打系统的联系人数据,(看起来图画的有点乱,希望能看懂吧)
既然知道怎样能到系统的数据库找到数据。那我们就開始写代码实现吧:
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 = https://www.songbingjia.com/android/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); } }
结果为:
文章图片
以上就是给联系人插入一条记录。
【Android 四大组件学习之ContentProvider四】
推荐阅读
- Android攻城狮使用SubMenu创建子菜单
- APP反编译第一课《如何找到核心代码》
- Android攻城狮OptionsMenu
- android 两次调用DatePickerDialog.onDateSet()
- PPT怎样画时间线?PPT画彩色时间线办法_PowerPoint专区
- Excel表格怎样统计数据重复次数?Excel表格统计数据重复次数办法_Excel专区
- Word2017怎样打开标尺?Word2017打开标尺办法_Word专区
- Word中怎样输入化学方程式?Word输入化学方程式办法_Word专区
- WPS怎样设置文章首字悬挂下沉?_WPS office