As we know, Android's contacts and SMS management is developed via ContentProvider to the developer interface. Must start from the Contentresolver to solve. The Address book operation involves the use of the system source API, especially in the table URI above easy to confuse. In the next few articles, snails will continue to introduce Android communication management related knowledge of the article. These include contact acquisition, call history acquisition, SMS acquisition, SMS details to get sent SMS. No more nonsense.
First look at the structure of the contact's table
Which for the development of this is mainly concerned about the above three tables, which to use the joint query, about three table design can be Baidu to related articles.
The code eventually
Contact:
Want the source of children's shoes can be downloaded http://download.csdn.net/detail/waniu123/8554533;
Package cn.zxw.contact.domain;/** * Contact * @author Zhan * */public class Contactsinfo {public int _id;public String NAME;PU Blic string Phone;public string Email;public contactsinfo () {super ();} Public contactsinfo (int _id, string name, string phone, string email) {super (); this._id = _id;this.name = Name;this.phone = Phone;this.email = email;} @Overridepublic String toString () {return "PersonInfo [_id=" + _id + ", name=" + name + ", phone=" + phone+ ", email=" + E Mail + "]";}}
Get Contacts
/** * Get Contact * * @param context * @return */public static list<contactsinfo> Getcontactsinfos (context context) {Cont Entresolver resolver = Context.getcontentresolver (); list<contactsinfo> infos = new arraylist<contactsinfo> ();//Get Contact data access to the content provider of the contact// Contactscontract.authority com.android.contacts Authorization//The content provider action is required to read/write permissions//Matcher.adduri (Contactscontract.authority, " Raw_contacts ",//Raw_contacts);//Matcher.adduri (contactscontract.authority," raw_contacts/#/data ",//Raw_contacts _data); Uri uri = uri.parse ("content://com.android.contacts/raw_contacts"); Cursor Cursor1 = Resolver.query (URI, new string[] {"_id"}, Null,null, null); while (Cursor1.movetonext ()) {int _id = Curs Or1.getint (0); Contactsinfo info = new Contactsinfo (), Uri = Uri.parse ("content://com.android.contacts/raw_contacts/" + _id + "/data"); Cursor Cursor2 = Resolver.query (URI, new string[] {"Data1", "mimetype"}, NULL, NULL, NULL), while (Cursor2.movetonext ()) { String data1 = cursor2.getstring (0); String MimeType = Cursor2.getstring (1), if ("Vnd.android.cursor.item/phone_v2". Equals (MimeType)) {//number info.phone = data1;} else if (" Vnd.android.cursor.item/name ". Equals (MimeType)) {//name info.name = data1;}} Cursor2.close (); Infos.add (info);} Cursor1.close (); return infos;} /** * Get all call Logs * * @param context * @return */public list<callloginfo> Getcalllog (context context) {List<calll oginfo> infos = new arraylist<callloginfo> (); Contentresolver CR = Context.getcontentresolver (); Uri uri = Calls.content_uri; string[] projection = new string[] {calls.number, calls.date,calls.type}; cursor cursor = cr.query (URI, projection, NULL, NULL, NULL), while (Cursor.movetonext ()) {String number = cursor.getstring ( 0); Long date = Cursor.getlong (1); int type = Cursor.getint (2); Infos.add (new Callloginfo (number, date, type));} Cursor.close (); return infos;}
Package Cn.zxw.contact;import Java.util.arraylist;import Java.util.list;import cn.zxw.contact.domain.ContactsInfo; Import Cn.zxw.contact.utils.contactsmsgutils;import Android.os.bundle;import Android.view.view;import Android.view.viewgroup;import Android.widget.baseadapter;import Android.widget.listview;import Android.widget.textview;import android.app.activity;/** * Contact * * @author Zhan * */public class Contactsactivity extends Activity {private ListView lv; @Overrideprotected void onCreate (Bundle savedinstancestate) {super.oncreate ( Savedinstancestate); Setcontentview (r.layout.activity_contacts_msg_calllog); LV = (ListView) Findviewbyid (R.id.lv); list<contactsinfo> infos = Contactsmsgutils.getcontactsinfos (Getapplicationcontext ()); Myadapter adapter = new Myadapter (infos); Lv.setadapter (adapter);} Private class Myadapter extends Baseadapter {//list<contactsinfo> infos = new arraylist<contactsinfo> (); Private TextView tv_number;private TextView tv_name;public myadapter (list&Lt Contactsinfo> infos) {super (); This.infos = Infos;} @Overridepublic int GetCount () {return infos.size ();} @Overridepublic Object getItem (int position) {return null;} @Overridepublic long Getitemid (int position) {return 0;} @Overridepublic view GetView (int position, view Convertview, ViewGroup parent) {View view = View.inflate (Getapplicationco ntext (), r.layout.contacts_list_item, null), Tv_number = (TextView) View.findviewbyid (r.id.tv_number); tv_name = ( TextView) View.findviewbyid (r.id.tv_name); Contactsinfo info = infos.get (position); Tv_number.settext (Info.phone); Tv_name.settext (info.name); return view;}}}
Android Contacts Management One of the contacts get