1、Android使用内容提供者给我们提供了一些系统数据供我们访问,其中短信的Uri地址为:短信的Uricontent://sms/
手机联系人的Uri地址为:content://com.android.contacts/raw_contacts(获得联系人的id,姓名)
content://com.android.contacts/raw_contacts/"+id+"/data(根据联系人的id获得联系人的信息)
执行效果如下所图:
2、下面是一个简单的读取短信的例子:
如下是xml文件
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.android_contentresolver02.MainActivity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取联系人" android:onClick="readperson" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取短信" android:onClick="readmessage" /> LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="220dp"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_listview_person" > ListView> LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" > <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_listview_message" > ListView> LinearLayout> LinearLayout>
02.MainActivity文件
package com.example.android_contentresolver02; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private ContentResolver contentResolver; private ListView lv_listview_person; private ListView lv_listview_message; private List
//得到的联系人的id int id = cursor.getInt(cursor.getColumnIndex("_id"));
//得到联系人的名字
String displayname = cursor.getString(cursor.getColumnIndex("display_name"));
//把名字添加到集合中
personmap.put("names", displayname); // 协议:content://com.android.contacts/raw_contacts/"+id+"/data(根据联系人的id获得联系人的信息) Cursor cursordate = contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts/" + id + "/data"), null, null, null, null); while (cursordate.moveToNext()) { //如果用了这个会报这样的错( Failed to read row 0, column -1 from 所以用下面这个字段) //int type= cursordate.getInt(cursor.getColumnIndex("mimetype_id"));
//得到联系人的类型
String type = cursordate.getString(cursordate.getColumnIndex("mimetype"));
//得到联系人的电话号码
String dates = cursordate.getString(cursordate.getColumnIndex("data1")); //给personmap集合添加值 personmap.put("phones", dates); } //将personmap集合添加到persondata大的集合中显示 persondata.add(personmap);
} //通知适配器发生改变 personsa.notifyDataSetChanged(); } //获取短信的方法 public void readmessage(View view) { Cursor cursor = contentResolver.query(Uri.parse("content://sms/"), new String[]{"_id", "address", "body", "date", "type"}, null, null, null); if (cursor != null && cursor.getCount() > 0) { int _id; String address; String body; String date; int type; while (cursor.moveToNext()) { //实例化一个messagemap集合放电话号码跟短信内容的值 messagemap = new HashMap(); _id = cursor.getInt(0); address = cursor.getString(1); body = cursor.getString(2); date = cursor.getString(3); type = cursor.getInt(4); //给messagemap集合里设值 messagemap.put("myphones",address); messagemap.put("content",body); //将messagemap集合添加到messagedata大的集合中 messagedata.add(messagemap); Log.i("test", "_id=" + _id + " address=" + address + " body=" + body + " date=" + date + " type=" + type); } } //通知适配器发生改变 messagesa.notifyDataSetChanged(); } }
03.清单文件中加上读写短信的权限
<uses-permission android:name="android.permission.READ_CONTACTS">uses-permission> <uses-permission android:name="android.permission.READ_SMS">uses-permission> <uses-permission android:name="android.permission.WRITE_SMS">uses-permission>