`
zhy20045923
  • 浏览: 156673 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

判断联系人是否存在

阅读更多
联系人存储包括两个位置:SIM卡和手机上,在查找过程中要分别判断。

手机上存储位置在/data/data/com/android.providers.contacts/databases。

1 判断是否存储在手机上(CallDetailActivity)
Uri personUri = null;
                    Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                            Uri.encode(mNumber));
                    Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
                    try {
                        if (phonesCursor != null && phonesCursor.moveToFirst()) {
                            long personId = phonesCursor.getLong(COLUMN_INDEX_ID);
                            personUri = ContentUris.withAppendedId(
                                    Contacts.CONTENT_URI, personId);
                            callText = getString(R.string.recentCalls_callNumber,
                                    phonesCursor.getString(COLUMN_INDEX_NAME));
                            mNumber = PhoneNumberUtils.formatNumber(
                                    phonesCursor.getString(COLUMN_INDEX_NUMBER));
                            callLabel = Phone.getDisplayLabel(this,
                                    phonesCursor.getInt(COLUMN_INDEX_TYPE),
                                    phonesCursor.getString(COLUMN_INDEX_LABEL)).toString();
                        } else {
                            mNumber = PhoneNumberUtils.formatNumber(mNumber);
                        }
                    } finally {
                        if (phonesCursor != null) phonesCursor.close();
                    }

还可以用以下几种方式搜索:
 Cursor cursor = this.getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                projection, //返回字段
                ContactsContract.CommonDataKinds.Phone.NUMBER + " = '" + mNumber + "'", // 
                null, // WHERE clause value substitution
                null); // Sort order.

判断是否存在SIM卡上(CallDetailActivity)
Cursor simCursor=null;
                        String[] SIM_CONTENT_PROJECTION = new String[] {
                                "name", "number", };
                        boolean hasIccCard1 = ((TelephonyManager) this .getSystemService(
                                PhoneFactory.getServiceName(Context.TELEPHONY_SERVICE, 0))).hasIccCard();

                        if(hasIccCard1){
                            simCursor = resolver.query(EditSimCardActivity.SIM1_URI,SIM_CONTENT_PROJECTION, null, null, null);
                            try {
                                if (simCursor != null) {
                                    if (simCursor.moveToFirst()) {
                                        do {
                                            String tempName = simCursor.getString(0);
                                            String tempNumber = simCursor.getString(1);
                                            if (mNumber.equals(tempNumber)) {
                                                hasFoundContact=true;
                                                simContactIntent=new Intent();
                                                simContactIntent.setClass(this, ViewSimCardContactActivity.class);
                                                simContactIntent.putExtra(EditSimCardActivity.SIM_CONTACT_NAME, tempName);
                                                simContactIntent.putExtra(EditSimCardActivity.SIM_CONTACT_NUMBER, tempNumber);
                                                simContactIntent.putExtra(EditSimCardActivity.SIM_ADDRESS, EditSimCardActivity.SIM1_ADDRESS);
                                                callText = getString(R.string.recentCalls_callNumber,tempName);
                                                mNumber = PhoneNumberUtils.formatNumber(tempNumber);
                                                break;
                                            }
                                        } while (simCursor.moveToNext());
                                    }
                                    simCursor.close();
                                }
                            } finally {
                                if (simCursor != null) simCursor.close();
                            }
                        }

打开联系人详情页面(CallDetailActivity)
if (personUri != null) { //phone
                        Intent viewIntent = new Intent(Intent.ACTION_VIEW, personUri);
                        actions.add(new ViewEntry(R.drawable.sym_action_view_contact,
                                getString(R.string.menu_viewContact), viewIntent));
                    } else if (simContactIntent != null) { //sim
                        actions.add(new ViewEntry(R.drawable.sym_action_view_contact,
                                getString(R.string.menu_viewContact), simContactIntent));
                    } else { // none
                        Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        createIntent.setType(Contacts.CONTENT_ITEM_TYPE);
                        createIntent.putExtra(Insert.PHONE, mNumber);
                        actions.add(new ViewEntry(R.drawable.sym_action_add,
                                getString(R.string.recentCalls_addToContact), createIntent));
                    }


拉起联系人修改或添加界面
//android.intent.action.INSERT_OR_EDIT
            Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
//vnd.android.cursor.item/contact
            intent.setType(Contacts.CONTENT_ITEM_TYPE);
            intent.putExtra(Insert.PHONE, number);

直接拉起添加页面
			Intent intent = new Intent(Intent.ACTION_INSERT,
					Uri.withAppendedPath(
							Uri.parse("content://com.android.contacts"),
							"contacts"));
			intent.putExtra(Intents.Insert.PHONE, number);


查询联系人并区分存储位置
private void initDate() {
		// 查找所有联系人
		Cursor cursor = getContentResolver().query(
				ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		int contactIdIndex = 0;
		int nameIndex = 0;
		if (cursor.getCount() > 0) {
			DatabaseUtils.dumpCursor(cursor);
			contactIdIndex = cursor
					.getColumnIndex(ContactsContract.Contacts._ID);
			nameIndex = cursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
		}
		while (cursor.moveToNext()) {
			String contactId = cursor.getString(contactIdIndex);
			String name = cursor.getString(nameIndex);

			/*
			 * 查找该联系人的phone信息
			 */
			Cursor phones = getContentResolver().query(
					ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
					null,
					ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
							+ contactId, null, null);
			int phoneIndex = 0;
			int accouttypeIndex = 0;
			if (phones.getCount() > 0) {
				DatabaseUtils.dumpCursor(phones);
				phoneIndex = phones
						.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
				accouttypeIndex = phones
						.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
			}
			while (phones.moveToNext()) {
				String phoneNumber = phones.getString(phoneIndex);
				int AccountType = phones.getInt(accouttypeIndex);
				// 1 存在手机  ;2 存在sim卡上
				if(1 == AccountType){
					ImportContactBean bean = new ImportContactBean(contactId, name, phoneNumber);
					mContactlist.add(bean);
				}
			}
			if (phones != null) {
				phones.close();
			}
		}
		if (cursor != null) {
			cursor.close();
		}
	}
分享到:
评论

相关推荐

    C++实现通讯录管理系统(OOP类,链表,文件读取等操作实现通讯录的基本功能)

    菜单功能:可通过菜单选择要使用的功能选项 添加联系人:向通讯录中添加newpeople,信息包括(姓名、性别、年龄、联系电话、家庭住址) ...先判断联系人是否存在,若存在,利用DelBase(index);进行链表的删除操作

    课程设计——通讯录(C语言实现)

    Main函数入口进入程序,调用Menu函数显示通讯录菜单,之后进入选择项,调用AddContact函数添加联系人,DelContacts函数删除联系人,Search函数搜索联系人,Search函数调用Check函数判断联系人是否存在,...

    Android判断某个权限是否开启的方法

    为了使用特定的功能,如访问相机、联系人、麦克风等,应用开发者需要在应用的manifest文件中声明这些权限。当运行时需要这些权限时,应用需要向用户请求并获得用户的授权。 为了判断一个权限是否已经被用户授权开启...

    23-通讯录编辑联系人保存联系人信息.zip

    - 若要修改已存在的联系人,先通过`CNContactStore`的`unifiedContact(withIdentifier:keysToFetch:)`获取联系人,修改其属性,再调用`save(_:to:completionHandler:)`进行保存。 6. **删除联系人**: - 使用`...

    tongxunlu.rar_tongxunlu_联系人

    例如,当用户试图删除不存在的联系人时,程序应给出相应提示。控制台应用程序通常使用Scanner类来获取用户输入,然后根据输入调用相应的方法。 总的来说,这个“tongxunlu”项目为初学者提供了宝贵的实践经验,帮助...

    命令行联系人程序-python-from-简明python

    在这个联系人程序中,可能会用到`if-else`语句进行条件判断,`for`或`while`循环进行迭代,以及函数定义(`def`关键字)来封装可重复使用的代码。 接触命令行接口(CLI)是这个项目的另一个关键部分。在Python中,...

    离散数学-判断图的性质

    例如,在社交网络分析中,一个强连通的社交网络意味着每个人都可以通过一系列的连接与其他所有人建立联系。 - 在计算机网络中,确保所有节点之间具有连通性是非常重要的,这有助于保证数据包能够成功传输。 4. **...

    java设计电话通讯录功能

    这个联系人存在不能继续添加进通讯录里面 cmd里面显示:对不起 当前用户已经存在 同一个用户不能添加多次 如果不存在 将当前联系人添加进集合里面 cmd里面显示:添加成功 删除联系人 如果用户选择的是D: ...

    Android项目获取手机通讯录的实战应用(含SIM卡中的联系人).rar

    6. **兼容性问题**:不同Android版本对联系人API的支持可能存在差异,因此在编写代码时,要考虑API级别的兼容性,使用`Build.VERSION.SDK_INT`进行条件判断,以确保在多个版本上都能正常运行。 7. **隐私和用户许可...

    雅思阅读判断题.pdf

    这个情况下,尽管原文中提到了会提供额外信息(如如何到达别墅和当地联系人的电话),但并没有明确指出是在收到押金后,还是在其他时间。这种情况下,题目中的信息与原文没有明显的对立,但由于原文并未明确提及...

    第八章判断.docx_电子版_docx版

    判断与推理之间存在着紧密的联系。推理是为达到判断而进行的一系列尝试性思考过程,它通过逻辑推演帮助我们形成或验证假设。而在实际操作中,判断往往需要在有限的信息和时间内做出,因此它依赖于个人的经验、直觉和...

    C语言通讯录.cpp

    设计一个通讯录管理系统,每条记录包括:联系...需要判断新添加的记录是否存在,若存在终止该操作。 5、删除指定记录。通过查询功能,找到要删除的记录。在删除记录前显示是否要删除的提示。 6、退出通讯录管理系统。

    选择题和判断题定义.pdf

    4. **信息资源管理实例**:建立学生数据库、电子表格处理软件创建班级考勤表、使用电话本记录联系人信息、使用文字处理软件记录学生信息,这些都是信息资源管理的具体应用。 5. **数据库管理**:学校管理大量学生...

    Android开发人员不得不收集的代码

    判断文件是否存在,不存在则判断是否创建成功 createOrExistsFile 判断文件是否存在,存在则在创建之前删除 createFileByDeleteOldFile 复制目录 copyDir 复制文件 copyFile 移动目录 moveDir 移动文件 moveFile ...

    大一C语言的期末大作业----通讯录

    此函数与查询函数类似,先查找指定姓名的联系人是否存在,如果存在则让用户重新输入联系人的信息进行修改。 ##### 删除联系人 ```c void delete_friend(struct friends_list friends[], char* name) { int i, flag...

    sd.rar_判断 一个 二元 关系 性质_判断自反

    二元关系是指在一个集合上的两个元素之间存在某种特定的联系或连接。用数学符号表示,如果集合A中的元素a与元素b有某种关系R,我们写作\( (a, b) \in R \)。 1. **自反性**:如果集合A中的每一个元素都与自身有关联...

    MMS发送流程(代码版)android

    如果编辑联系人可见,说明当前是给新建联系人的短信,则需要判断是否含有不合法的收件人。 判断收件人 在 confirmSendMessageIfNeeded 方法中,会使用 mRecipientsEditor.hasInvalidRecipient 方法判断是否含有不...

    论保险法中近因原则的常识性判断.doc

    1. **连续性**:事件之间是否有明显的因果联系,一个事件是否自然、必然地引发了下一个事件。 2. **预见性**:保险人是否能够合理预见某一事件可能导致损失。 3. **独立性**:是否存在一个独立于保险覆盖范围之外的...

    C++编写的通讯录系统

    = 0`来判断输入的名字是否存在于通讯录中。 ### 5. 动态内存分配 通过`malloc`函数动态地为链表节点分配内存空间。例如,在`void Input()`函数中,通过`malloc`为新创建的联系人信息分配内存空间,并将输入的信息...

Global site tag (gtag.js) - Google Analytics