- 浏览: 156673 次
- 性别:
- 来自: 深圳
最新评论
-
dawei1980:
请问,解压密码是多少?
Android本地APP集成Mui框架 -
牧羊之人:
Android本地APP集成Mui框架 -
还有也许:
貌似懂了一点。如果onCreate方法中创建了一个db,然后在 ...
Android线程模式(handler,thread,looper) -
chenshijun0101:
header里面怎么更改他的样式呢?急求
android Preference相关样式修改 -
qlraishui:
good
Binder机制分析【三】-service绑定Binder
联系人存储包括两个位置:SIM卡和手机上,在查找过程中要分别判断。
手机上存储位置在/data/data/com/android.providers.contacts/databases。
1 判断是否存储在手机上(CallDetailActivity)
还可以用以下几种方式搜索:
判断是否存在SIM卡上(CallDetailActivity)
打开联系人详情页面(CallDetailActivity)
拉起联系人修改或添加界面
直接拉起添加页面
查询联系人并区分存储位置
手机上存储位置在/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(); } }
发表评论
-
判断图片是浅色还是深色
2020-03-04 13:23 785首先需要获取 WallpaperManager.FLAG_L ... -
如何将uri转成真实路径地址
2018-10-15 17:38 1190/** * 获取文件选择器选中的文 ... -
备用网址记录
2018-01-08 11:05 425各种开源下载 http://www.mvnjar.com/ ... -
android中touch事件,click事件,longclick事件分析
2016-08-03 15:51 1491针对屏幕上的一个View控件,Android如何区分应当触发o ... -
Android 快速开发系列 打造万能的ListView GridView 适配器
2016-06-27 17:21 670前往 http://blog.csdn.net/lmj6235 ... -
android中的Handler和AsyncTask如何防止内存泄露
2016-06-13 13:55 1630Handler泄露的关键点有两个: 1). 内部类 ... -
[转载]SharedPreferences 存储java对象,很实用
2016-04-14 16:36 1053public void putObject(String ke ... -
Android本地APP集成Mui框架
2016-01-26 14:41 31242.如何在安卓原生APP中 ... -
Android与设计模式浅谈
2015-04-27 10:42 1079Android作为新一代的操作系统,集合着Google ... -
从网页启动Activity
2015-03-24 11:28 1362正好Android SDK 给我们提供了解决方案,在网页中点击 ... -
[转]android shape的使用
2014-10-13 13:30 758shape用于设定形状,可以在selector,layout等 ... -
touch事件分发处理流程
2014-05-23 09:44 816Touch 事件发生时 Activity 的 dispatch ... -
修改标准GSensor相关,是重力感应游戏在平板都可以玩
2013-12-21 11:27 846为什么有些重力感应的游戏不能玩,有些可以玩,主要原因在于fra ... -
Android模拟按键
2013-10-14 14:27 2400如果想要实现类似iphone的悬浮框按钮,那就必须知道如何去模 ... -
android资源适配解析及资源适配优先级规则
2013-10-12 12:41 36701.sw的值是怎么计算得来 ... -
[转]隐藏虚拟按键(导航栏)的方法
2013-10-12 10:35 2894Controls for system UI visibili ... -
【转】解决Android与服务器交互大容量数据问题
2013-09-02 14:40 2049对于目前的状况来说, ... -
[转载]Android大图裁剪解决办法
2013-04-25 14:29 2122cropimage 可以调用手机自带的com.android ... -
反锯齿办法
2012-12-28 14:14 947在Android中,目前,我知道有两种出现锯齿的情况。 ① ... -
android线程的那些事
2012-11-17 15:36 2308有些时候Thread里面更新UI是可以成功的。 比如在Acti ...
相关推荐
菜单功能:可通过菜单选择要使用的功能选项 添加联系人:向通讯录中添加newpeople,信息包括(姓名、性别、年龄、联系电话、家庭住址) ...先判断联系人是否存在,若存在,利用DelBase(index);进行链表的删除操作
Main函数入口进入程序,调用Menu函数显示通讯录菜单,之后进入选择项,调用AddContact函数添加联系人,DelContacts函数删除联系人,Search函数搜索联系人,Search函数调用Check函数判断联系人是否存在,...
为了使用特定的功能,如访问相机、联系人、麦克风等,应用开发者需要在应用的manifest文件中声明这些权限。当运行时需要这些权限时,应用需要向用户请求并获得用户的授权。 为了判断一个权限是否已经被用户授权开启...
- 若要修改已存在的联系人,先通过`CNContactStore`的`unifiedContact(withIdentifier:keysToFetch:)`获取联系人,修改其属性,再调用`save(_:to:completionHandler:)`进行保存。 6. **删除联系人**: - 使用`...
例如,当用户试图删除不存在的联系人时,程序应给出相应提示。控制台应用程序通常使用Scanner类来获取用户输入,然后根据输入调用相应的方法。 总的来说,这个“tongxunlu”项目为初学者提供了宝贵的实践经验,帮助...
在这个联系人程序中,可能会用到`if-else`语句进行条件判断,`for`或`while`循环进行迭代,以及函数定义(`def`关键字)来封装可重复使用的代码。 接触命令行接口(CLI)是这个项目的另一个关键部分。在Python中,...
例如,在社交网络分析中,一个强连通的社交网络意味着每个人都可以通过一系列的连接与其他所有人建立联系。 - 在计算机网络中,确保所有节点之间具有连通性是非常重要的,这有助于保证数据包能够成功传输。 4. **...
这个联系人存在不能继续添加进通讯录里面 cmd里面显示:对不起 当前用户已经存在 同一个用户不能添加多次 如果不存在 将当前联系人添加进集合里面 cmd里面显示:添加成功 删除联系人 如果用户选择的是D: ...
6. **兼容性问题**:不同Android版本对联系人API的支持可能存在差异,因此在编写代码时,要考虑API级别的兼容性,使用`Build.VERSION.SDK_INT`进行条件判断,以确保在多个版本上都能正常运行。 7. **隐私和用户许可...
这个情况下,尽管原文中提到了会提供额外信息(如如何到达别墅和当地联系人的电话),但并没有明确指出是在收到押金后,还是在其他时间。这种情况下,题目中的信息与原文没有明显的对立,但由于原文并未明确提及...
判断与推理之间存在着紧密的联系。推理是为达到判断而进行的一系列尝试性思考过程,它通过逻辑推演帮助我们形成或验证假设。而在实际操作中,判断往往需要在有限的信息和时间内做出,因此它依赖于个人的经验、直觉和...
设计一个通讯录管理系统,每条记录包括:联系...需要判断新添加的记录是否存在,若存在终止该操作。 5、删除指定记录。通过查询功能,找到要删除的记录。在删除记录前显示是否要删除的提示。 6、退出通讯录管理系统。
4. **信息资源管理实例**:建立学生数据库、电子表格处理软件创建班级考勤表、使用电话本记录联系人信息、使用文字处理软件记录学生信息,这些都是信息资源管理的具体应用。 5. **数据库管理**:学校管理大量学生...
判断文件是否存在,不存在则判断是否创建成功 createOrExistsFile 判断文件是否存在,存在则在创建之前删除 createFileByDeleteOldFile 复制目录 copyDir 复制文件 copyFile 移动目录 moveDir 移动文件 moveFile ...
此函数与查询函数类似,先查找指定姓名的联系人是否存在,如果存在则让用户重新输入联系人的信息进行修改。 ##### 删除联系人 ```c void delete_friend(struct friends_list friends[], char* name) { int i, flag...
二元关系是指在一个集合上的两个元素之间存在某种特定的联系或连接。用数学符号表示,如果集合A中的元素a与元素b有某种关系R,我们写作\( (a, b) \in R \)。 1. **自反性**:如果集合A中的每一个元素都与自身有关联...
如果编辑联系人可见,说明当前是给新建联系人的短信,则需要判断是否含有不合法的收件人。 判断收件人 在 confirmSendMessageIfNeeded 方法中,会使用 mRecipientsEditor.hasInvalidRecipient 方法判断是否含有不...
1. **连续性**:事件之间是否有明显的因果联系,一个事件是否自然、必然地引发了下一个事件。 2. **预见性**:保险人是否能够合理预见某一事件可能导致损失。 3. **独立性**:是否存在一个独立于保险覆盖范围之外的...
= 0`来判断输入的名字是否存在于通讯录中。 ### 5. 动态内存分配 通过`malloc`函数动态地为链表节点分配内存空间。例如,在`void Input()`函数中,通过`malloc`为新创建的联系人信息分配内存空间,并将输入的信息...