我们在实际生活中只能充当数据访问者,那么怎么访问手机中的“数据”呢? 所谓数据,在手机中指的就是联系人、信息、图片、音乐等等一些媒体文件,现在我就说说怎么获取手机中的联系人。 一、单纯只是获得手机联系人 1、写一个Activity,两个Button,然后使用ListView绑定数据
2、获取内容访问者:cr = getContentResolver(); 3、然后再获取联系人
这样点击查看联系人信息,数据就绑出来了
然后点击ListView,进入手机系统内的联系人详细页面 3、先初始化数据库查询参数
PRivate void init() { Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // 联系人Uri; // 查询的字段 String[] projection = { ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.DATA1, "sort_key", ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.PHOTO_ID, ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY }; // 按照sort_key升序查詢 asyncQueryHandler.startQuery(0, null, uri, projection, null, null, "sort_key COLLATE LOCALIZED asc");}2、先写一个内部类MyAsyncQueryHandler 然后继承AsyncQueryHandler 异步查询数据库类对象 private class MyAsyncQueryHandler extends AsyncQueryHandler {
public MyAsyncQueryHandler(ContentResolver cr) { super(cr); } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { contactIdMap = new HashMap<Integer, ContactBean>(); list = new ArrayList<ContactBean>(); cursor.moveToFirst(); // 游标移动到第一项 for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); String name = cursor.getString(1); String number = cursor.getString(2); String sortKey = cursor.getString(3); int contactId = cursor.getInt(4); Long photoId = cursor.getLong(5); String lookUpKey = cursor.getString(6); if (contactIdMap.containsKey(contactId)) { // 无操作 } else { // 创建联系人对象 ContactBean contact = new ContactBean(); contact.setDesplayName(name); contact.setPhoneNum(number); contact.setSortKey(sortKey); contact.setPhotoId(photoId); contact.setLookUpKey(lookUpKey); Log.i("ccc",photoId+""); list.add(contact); contactIdMap.put(contactId, contact); } } } super.onQueryComplete(token, cookie, cursor); }}4、点击事件 private void setAdapter(final List list) {
adapter = new ContactListAdapter(this, list); contactList.setAdapter(adapter); contactList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { li = new ArrayList<ContactBean>(); ContactBean c=new ContactBean(); c.setPhotoId(list.get(position).getPhotoId()); c.setPhoneNum(list.get(position).getPhoneNum()); c.setDesplayName(list.get(position).getDesplayName()); li.add(c); edit_querys.setText(list.get(position).getPhoneNum()); } });}*加入适配器后,就可以对你查出来的诗句进行点击,同时可以进到系统自带的联系人“详细页面”
二、怎么获取系统联系人的页面同时选择一个把选中的那一个绑定出来 1、首先先在当前页面写一个文本框接收那边传过来的值,然后点击跳转系统联系人页面执行一个getData的方法跳到系统联系人页面 public void getData(View view){
Uri uri=Uri.parse("content://contacts/people"); Intent intent=new Intent(Intent.ACTION_PICK,uri); startActivityForResult(intent,0);}2、接着点击系统联系人页面的联系人,然后得到被选中的人的姓名和电话号码拼接成一个字符串,将值返回到初始页面,并且绑定在写好的文本框中。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 0: if(data==null) { return; } //处理返回的data,获取选择的联系人信息 Uri uri=data.getData(); String[] contacts=getPhoneContacts(uri); s = contacts[0]+”:”+contacts[1]; bangding.setText(s); break; } super.onActivityResult(requestCode, resultCode, data); }
private String[] getPhoneContacts(Uri uri){ String[] contact=new String[2]; //得到ContentResolver对象 ContentResolver cr = getContentResolver(); //取得电话本中开始一项的光标 Cursor cursor=cr.query(uri,null,null,null,null); if(cursor!=null) { cursor.moveToFirst(); //取得联系人姓名 int nameFieldColumnIndex=cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); contact[0]=cursor.getString(nameFieldColumnIndex); //取得电话号码 String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null); if(phone != null){ phone.moveToFirst(); contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phone.close(); cursor.close(); } else { return null; } return contact;}新闻热点
疑难解答