作为一名程序猿,最大的痛苦莫过于陪电脑代码度过了大多数时间,而陪你的他(她花费了太少时间,当你熬夜掉发,为IT的你不顾形象,形容枯槁。是不是会想知道你的他(她)在这一段时间干了什么呢,是不是想获取他的通讯录,别着急,作为一个Android的程序员,我们先做到获取他手机的联系人,偷偷给他的手机安一个小程序,读取全部信息,然后调用信息功能全部发过来,嘿嘿,闲话不多说让我们开始吧
想要在不同应用程序间交换信息,有一个非常重要的类,ContentProvider,这个类提供各个程序之间的数据库标准,联系人contactprovider,我们需要ID,以及联系人,为了方便起见我们用listview显示联系人,id,手机号码长按出现上下文菜单显示。
首先定义主布局函数:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/mainInfo" android:textSize="20px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机联系人列表"/> <ListView android:id="@+id/contactsList" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
然后是模板定义:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow> <TextView android:id="@+id/_id" android:layout_height="wrap_content" android:layout_width="30px" /> <TextView android:id="@+id/name" android:layout_height="wrap_content" android:layout_width="300px" /> </TableRow> </TableLayout>
然后是主函数Activity,这里实现是通过给的uri,uri相当于地址,找到联系人数据库,然后一一存到map里,然后list添加map,然后适配器封装list,之后就是listview添加适配器显示。
public class MainActivity extends Activity { private Cursor result = null ; // 既然要查询,查询返回的就是结果 private ListView contactsList = null ; // 定义ListView组件 private List<Map<String,Object>> allContacts = null ; private SimpleAdapter simple = null ; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.contactsList=(ListView)super.findViewById(R.id.contactsList); //这里获取通讯录联系人URI里的内容 this.result = super.getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); // 查询 super.startManagingCursor(this.result) ; // 将结果集交给容器管理 this.allContacts = new ArrayList<Map<String,Object>>() ; // 实例化List集合 for (this.result.moveToFirst(); !this.result.isAfterLast(); this.result .moveToNext()) { // 取出结果集中的每一个内容 Map<String,Object> contact = new HashMap<String,Object>() ; //将通讯录里人id取出,标准格式 contact.put("_id", this.result.getInt(this.result .getColumnIndex(ContactsContract.Contacts._ID))); contact.put("name", this.result.getString(this.result .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); this.allContacts.add(contact) ; } this.simple = new SimpleAdapter(this, this.allContacts, R.layout.contact, new String[] { "_id", "name" }, new int[] { R.id._id, R.id.name }); this.contactsList.setAdapter(this.simple) ; super.registerForContextMenu(this.contactsList); // 注册菜单 }
然后定义上下文菜单显示手机号码:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // 创建菜单 super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("联系人操作"); menu.add(Menu.NONE, Menu.FIRST + 1, 1, "查看详情"); menu.add(Menu.NONE, Menu.FIRST + 2, 1, "删除信息"); } public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); int position = info.position; // 取得操作位置 String contactsId = this.allContacts.get(position).get("_id").toString() ; switch(item.getItemId()){ // 进行菜单的操作 case Menu.FIRST + 1: // 查看 String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?"; String[] phoneSelectionArgs = new String[] { contactsId}; Cursor c = super.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, phoneSelection, phoneSelectionArgs, null); StringBuffer buf = new StringBuffer() ; buf.append("电话号码是:") ; for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { buf.append( c.getString(c .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))) .append("、"); } Toast.makeText(this, buf, Toast.LENGTH_SHORT) .show(); break ; case Menu.FIRST + 2: // 删除 super.getContentResolver().delete( Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactsId), null, null); this.allContacts.remove(position) ; // 删除集合数据项 this.simple.notifyDataSetChanged() ; // 通知改变 Toast.makeText(this, "数据已删除!", Toast.LENGTH_SHORT).show(); break ; } return super.onContextItemSelected(item); }
显示效果如下:
这里我们做到了读取,下节课我们做盗取通讯记录,无论是谁打给他,她你都会知道
想要做到实时监控么,那么就跟着学习到通信章节吧,当然这种小软件不要玩过火,适当的关心是关心,过分的关心可是会bug的
相关推荐
本文将深入探讨如何使用ContentProvider来读取系统的联系人信息。 一、ContentProvider基础 ContentProvider是Android四大组件之一,它的主要职责是管理和提供应用程序的数据,使得其他应用可以方便地访问这些数据...
本篇将详细解析如何利用ContentProvider来读取手机通讯录中的联系人名称和手机号码。 首先,了解ContentProvider的基本概念。ContentProvider是Android四大组件之一,它为应用程序提供了一种标准接口,使得不同应用...
本篇将详细介绍如何在Android中利用ContentProvider和ContentResolver来操作联系人。 一、ContentProvider基础 1. **ContentProvider的作用**:ContentProvider为应用程序提供了一种标准化的方式,使得应用的数据...
在Android系统中,获取手机联系人信息是常见的需求,这通常涉及到ContentProvider和ContentResolver两个核心组件。ContentProvider是Android中用于数据共享和跨应用数据访问的机制,而ContentResolver则是应用程序与...
对联系人进行操作时,需要在AndroidManifest.xml中声明相应的权限,如`READ_CONTACTS`和`WRITE_CONTACTS`,以允许应用读取和写入联系人数据。 五、自定义ContentProvider 虽然系统提供了联系人ContentProvider,但...
这篇博客“contentprovider--读取写入联系人数据”显然聚焦于如何利用ContentProvider操作设备上的联系人信息。ContentProvider作为应用间数据交换的桥梁,允许不同应用访问存储在其他应用中的数据,前提是这些数据...
本实例将详细讲解如何使用ContentProvider来实现手机联系人的读取和插入操作。 首先,我们需要了解Android系统的联系人数据存储机制。Android系统通过ContentProvider对外提供了一个统一的数据访问接口,其中...
总结来说,这个实例展示了如何使用ContentProvider读取手机联系人。通过查询ContactsContract提供的URI,我们可以获取到联系人的电话号码,然后使用BaseAdapter将其显示在ListView上。同时,别忘了在AndroidManifest...
在Android系统中,读取手机联系人是一项常见的功能,它涉及到Android的核心组件——ContentProvider。ContentProvider是Android四大组件之一,用于在不同的应用程序之间共享数据。在这个场景下,我们将主要探讨如何...
在Android平台上,开发人员可以利用系统的API来读取用户的联系人数据。这通常涉及到权限管理、ContentResolver的使用以及Cursor的遍历等关键知识点。以下是对这个"android读取系统联系人"主题的详细讲解: 1. **...
应用B只需知道应用A的ContentProvider的URI,就可以通过ContentResolver发起请求,实现文件的读取或写入。 2. Intent与ContentProvider:可以通过Intent的`setData()`方法设置目标URI,然后使用`...
在Android系统中,ContentProvider是数据共享的一种机制,它允许应用程序之间进行数据交换,特别是对于敏感数据如联系人、短信等。本主题将深入探讨如何使用ContentProvider来访问和添加联系人。 首先,理解...
本示例主要讲解如何利用ContentProvider获取手机中的联系人信息,并将其显示在一个ListView上。下面我们将详细探讨这个过程。 首先,我们要明确ContentProvider的作用。在Android系统中,每个应用的数据都是隔离的...
总结,读取和调用系统联系人涉及的主要知识点包括:ContentProvider、ContentResolver、ContactsContract、Cursor、Intent以及权限管理。在实际应用中,可以根据需求选择合适的方式来获取和显示联系人信息。
这个"获取手机联系人的简单DEMO"应该是一个简单的示例代码,用于教导开发者如何通过Android API来访问并读取设备上的联系人数据。在这个DEMO中,我们将深入探讨Android联系人API的使用,并学习如何在实际应用中实现...
在Android和iOS等移动操作系统中,读取手机联系人是一项常见的功能,许多应用程序都需要这个功能来实现社交网络、通讯管理或者其他个性化服务。本篇将详细阐述如何在Android和iOS平台上读取手机联系人。 ### ...
在Android平台上,获取手机通讯录联系人是一项常见的任务,尤其对于开发者来说,了解如何快速而全面地读取这些数据是至关重要的。这篇博客"快速读取全部手机通讯录联系人"提供了一个高效的方法来实现这一功能。下面...
1. **了解系统Provider**:Android系统内置了一些ContentProvider,如联系人、日历等,了解它们的URI和MIME类型,这对于使用它们至关重要。 2. **获取ContentResolver**:在任何Activity、Service或者...