我们知道,在添加联系人的时候,可能一个联系人不止一个号码,这时我们需要一个取得联系人多组号码的程序。
首先,需要介绍两点:
1.需要在AndroidManifest.xml文件中进行声明
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
2.Activity.startManagingCursor方法
我们将获得的Cursor对象交与Activity 来管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己管理Cursor。
2.1.这个方法使用的前提是:游标结果集里有很多的数据记录。
所以,在使用之前,先对Cursor是否为null进行判断,如果Cursor != null,再使用此方法
2.2.如果使用这个方法,最后也要用stopManagingCursor()来把它停止掉,以免出现错误。
2.3.使用这个方法的目的是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期便能和Activity自动同步,
省去自己手动管理。
下面给出程序的实现截图:
接下来给出程序的完整实现代码:
public class EX06_20 extends ListActivity
{
/*
* 使用List的一般原因是Adapter中的内容有变化,如果是ArrayAdapter则不允许内容有变化
*/
private ListAdapter mListAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 取得通讯录里的数据 */
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
/* 取得笔数 */
int c = cursor.getCount();
if (c == 0)
{
Toast.makeText(EX06_20.this, "联系人无资料\n请添加联系人资料", Toast.LENGTH_LONG)
.show();
}
/* 用Activity管理Cursor */
startManagingCursor(cursor);
/* 欲显示的字段名称 */
String[] columns =
{ ContactsContract.Contacts.DISPLAY_NAME };
/* 欲显示字段名称的view */
int[] entries =
{ android.R.id.text1 };
mListAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor, columns, entries);
/* 设置Adapter */
setListAdapter(mListAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
// TODO Auto-generated method stub
/* 取得点击的Cursor */
Cursor c = (Cursor) mListAdapter.getItem(position);
/* 取得_id这个字段得值 */
int contactId = c.getInt(c.getColumnIndex(ContactsContract.Contacts._ID));
/* 用_id去查询电话的Cursor */
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
null, null);
StringBuffer sb = new StringBuffer();
int type, typeLabelResource;
String number;
if (phones.getCount() > 0)
{
/* 2.0可以允许User设定多组电话号码,依序捞出 */
while (phones.moveToNext())
{
/* 取得电话的TYPE */
type = phones.getInt(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
/* 取得电话号码 */
number = phones.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
/* 由电话的TYPE找出LabelResource */
typeLabelResource = ContactsContract.CommonDataKinds.Phone
.getTypeLabelResource(type);
sb.append(getString(typeLabelResource) + ": " + number + "\n");
}
} else
{
sb.append("no Phone number found");
}
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
super.onListItemClick(l, v, position, id);
}
}
分享到:
相关推荐
this.startManagingCursor(cursor); // 游标适配器 SimpleCursorAdapter adapter = new SimpleCursorAdapter( // 错误 MainActivity.this, R.layout.adapter_listview, cursor, new String[] { ...
大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,2023年美赛特等奖O奖论文
亚太经社会:2024年亚太贸易便利化报告.pdf
消费者价格指数(CPI):按消费者价格指数衡量的通货膨胀反映出普通消费者在指定时间间隔(如年度)内购买固定或变动的一篮子货物和服务的成本的年百分比变化。通常采用拉斯佩尔公式进行计算。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
网页制作基础学习--HTML+CSS常用代码
IEC TS 60364-8-3-2020 低压电气装置.第8-3部分:功能方面.生产用户电气装置的操作.pdf
智能制造数字化供应链全栈解决方案.pptx
yolov5训练自己的数据集
附件是Windows 10系统上安装和配置Tomcat的步骤,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,历年美赛特等奖O奖论文
超级实用简洁的反色软件,支持部分区域反色!! 界面简洁,易于使用! 源码可以联系
2024年中国NAD+抗衰补剂行业研究报告
高德地图API+Python解决租房问题内含源码和设计文档.md
QYResearch:2023年前10大壁纸刀企业占据全球39%的市场份额.docx
此试题是考试后回忆版本,你会发现是惊喜。恭喜你考个好成绩。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
MVIMG_20240506_214323.jpg
大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,2023年美赛特等奖O奖论文
数据库是计算机科学中的一个核心领域,它用于存储、管理和检索数据。随着信息技术的发展,数据库技术已经渗透到我们日常生活的方方面面,从简单的网站用户信息管理到复杂的企业级数据仓库系统,无一不彰显其重要性。以下是一个关于数据库的综合资源描述,旨在为初学者和专业人士提供一个全面的视角。 ### 1. 数据库基础 数据库的基础知识包括了解数据模型、数据库管理系统(DBMS)以及SQL语言等。数据模型主要有关系型模型(如MySQL、Oracle)、非关系型模型(NoSQL,如MongoDB、Cassandra)等。关系型数据库遵循ACID特性(原子性、一致性、隔离性、持久性),适用于需要高度一致性的场景;而非关系型数据库则以灵活的schema设计和高可扩展性见长,适用于大数据处理和实时Web应用。 ### 2. 学习资源 - **在线课程**:Coursera、edX、Udacity等平台提供了多门数据库相关的课程,涵盖从入门到高级的各种主题,比如Stanford大学的《数据库系统概念》课程。 - **书籍**:《数据库系统概论》(Silberschatz, Korth, Sudarsha