移动教程:使用通讯簿组件(iOS和Android)
目录
TAddressBook组件的基本功能
发送访问设备通讯簿的请求并获取访问状态。 访问设备通讯簿中定义的所有源。 正在从指定的源获取所有或单个联系人。 正在获取指定组中的所有联系人。 编辑或删除现有联系人和组。 创建新联系人。 创建新组。
创建示例应用程序
请求访问通讯簿的权限。 从默认联系人中检索所有联系人 来源 在设备通讯簿中。 将新联系人添加到通讯簿。 正在从通讯簿中删除选定的联系人。
设计用户界面
创建空白 多设备应用程序 ,通过选择: 对于 德尔福 : 文件>新建>多设备应用程序-Delphi>空白应用程序 对于 C类++ : 文件>新建>多设备应用程序-C++Builder>空白应用程序
在 “项目”窗口 ,将目标平台设置为Android或iOS。 在 工具选项板 ,选择 T工具栏 , T通讯录 、和 列表框组件 组件并将其放置在 表单设计器 . 在 对象检查器 ,设置 排列 的属性 列表框组件 到 顾客 . 上 表单设计器 ,右键单击 列表框组件 ,然后在快捷菜单上选择 添加项目>TSearchBox . 在 工具选项板 ,选择 T多视图 组件,并将其放置在 表单设计器 .
设计应用程序工具栏和主窗格
在顶部工具栏上,放置三个 T速度按钮 组件。 在 表单设计器 ,请执行以下操作: 选择 速度按钮1 ,并设置 姓名 和 样式查找 属性到 bt删除 和 垃圾处理工具按钮已排序 分别是。 选择 速度按钮2 ,并设置 姓名 和 样式查找 属性到 bt刷新 和 按顺序刷新工具按钮 分别是。 选择 速度按钮3 ,并设置 姓名 和 样式查找 属性到 btn添加 和 按顺序添加工具按钮 分别是。
在 结构视图 ,选择 多视图1 ,然后在 对象检查器 ,指定以下属性: 设置 主控按钮 属性到 btn添加 . 设置 模式 属性到 抽屉 . 要使 多视图1 可见,设置 可见 属性到 真的 .
在 工具选项板 ,选择三个 T标签 组件,三个 T编辑 组件,和两个 按钮控件 组件,并将其放置到 多视图1 . 在 对象检查器 ,指定已放置到的控件元素的以下属性 多视图1 : 对于 标签1 , 标签2 、和 标签3 :设置 文本 属性到 名字 , 姓 、和 工作邮件 分别是。 对于 编辑1 , 编辑2 、和 编辑3 : 设置 姓名 属性到 编辑名字 , 编辑姓氏 、和 edt工作邮件 分别是。 设置 KillFocusByReturn(按返回) 属性到 真的 设置 返回键类型 属性到 去吧 .
对于 按钮1 和 按钮2 : 设置 文本 属性到 添加 和 取消 设置 姓名 属性到 btnOK(确定) 和 取消按钮 分别是。
检索联系人列表
填充联系人列表 :获取设备通讯簿中默认源的联系人列表; 添加列表框项 :将新项目添加到 列表框 .
私有的
{私有声明}
程序 填写联系人列表 ;
程序 添加列表框项 ( 联系人 : TAddressBook联系人 ) ;
私有的 : //用户声明
空隙 __快速呼叫 填充联系人列表 ();
空隙 __快速呼叫 添加列表框项 ( TAddressBook联系人 * 联系人 );
//填写联系人列表
程序 T形1 . 填写联系人列表 ;
无功功率,无功功率
我 : 整数 ;
联络 : TAddressBook联系人 ;
开始
联络 := TAddressBook联系人 . 创建 ;
尝试
通讯簿1 . 所有联系人 ( 通讯簿1 . 默认源 , 联络 ) ;
列表框1 . 开始更新 ;
尝试
列表框1 . 清除 ;
对于 我 := 0 到 联络 . 计数 - 1 做
添加列表框项 ( 联络 . 项目 [ 我 ]) ;
最后
列表框1 . 并且要应用 ;
结束 ;
最后
联络 . 免费 ;
结束 ;
结束 ;
// --------------------------------------------------------------------
//将新联系人添加到列表框
程序 T形1 . 添加列表框项 ( 联系人 : TAddressBook联系人 ) ;
无功功率,无功功率
列表框项目 : T列表框项目 ;
开始
尝试
列表框项目 := T列表框项目 . 创建 ( 无 ) ;
列表框项目 . 文本 := 联系人 . 显示名称 ;
列表框项目 . 标签 := 联系人 . 身份证件 ;
列表框1 . 添加对象 ( 列表框项目 ) ;
最后
列表框项目 . 免费 ;
结束 ;
结束 ;
//用现有联系人显示名称填充列表框。
空隙 __快速呼叫 T形1 :: 填充联系人列表 () {
整数 我 ;
TAddressBook联系人 * 联络 = 新的 TAddressBook联系人 ();
__尝试 {
通讯簿1 -> 所有联系人 ( 通讯簿1 -> 默认来源 (), 联络 );
__尝试 {
列表框1 -> 开始更新 ();
列表框1 -> 清除 ();
对于 ( 我 = 0 ; 我 < 联络 -> 计数 ; 我 ++ )
添加列表框项 ( 联络 -> 项目 [ 我 ]);
}
__最后 {
列表框1 -> 并且要应用 ();
}
}
__最后 {
联络 -> 免费 ();
}
}
// ---------------------------------------------------------------------------
//将新联系人添加到列表框
空隙 __快速呼叫 T形1 :: 添加列表框项 ( TAddressBook联系人 * 联系人 ) {
T列表框项目 * 列表框项目 = 新的 T列表框项目 ( 列表框1 );
__尝试 {
列表框项目 -> 文本 = 联系人 -> 显示名称 ;
列表框项目 -> 标签 = 联系人 -> 身份证件 ;
列表框1 -> 添加对象 ( 列表框项目 );
}
__最后 {
列表框项目 -> 免费 ();
}
}
实现控制元素功能
//-------------------用于删除按钮-----------------------------------------
程序 T形1 . bt删除单击 ( 发件人 : TObject(目标) ) ;
无功功率,无功功率
联系人索引 , 联系人ID : 整数 ;
联系人 : TAddressBook联系人 ;
开始
联系人索引 := 列表框1 . 项目索引 ;
如果 ( 联系人索引 > - 1 ) 然后
开始
联系人ID := 列表框1 . ListItems(列表项) [ 联系人索引 ] . 标签 ;
联系人 := 通讯簿1 . 联系人(按ID) ( 联系人ID ) ;
如果 联系人 <> 无 然后
尝试
通讯簿1 . 删除联系人 ( 联系人 ) ;
列表框1 . 开始更新 ;
列表框1 . 项目 . 删除 ( 联系人索引 ) ;
最后
列表框1 . 并且要应用 ;
联系人 . 免费 ;
结束 ;
结束 ;
结束 ;
//-------------------用于“刷新”按钮---------------------------------------
程序 T形1 . btn刷新单击 ( 发件人 : TObject(目标) ) ;
开始
填充联系人列表 ;
结束 ;
//-------------------用于删除按钮-----------------------------------------
//从列表框中删除当前选定的联系人
空隙 __快速呼叫 T形1 :: bt删除单击 ( TObject(目标) * 发件人 ) {
整数 联系人索引 = 列表框1 -> 项目索引 ;
如果 ( 联系人索引 > - 1 ) {
整数 联系人ID = 列表框1 -> ListItems(列表项) [ 联系人索引 ] -> 标签 ;
TAddressBook联系人 * 联系人 = 通讯簿1 -> 联系人(按ID) ( 联系人ID );
如果 ( 联系人 = 无效的 ) {
__尝试 {
通讯簿1 -> 删除联系人 ( 联系人 );
列表框1 -> 开始更新 ();
列表框1 -> 项目 -> 删除 ( 联系人索引 );
}
__最后 {
列表框1 -> 并且要应用 ();
联系人 -> 免费 ();
}
}
}
}
//---------------------------“刷新”按钮-------------------------------------
空隙 __快速呼叫 T形1 :: bt刷新单击 ( TObject(目标) * 发件人 ) {
填充联系人列表 ();
}
在 结构视图 ,选择 多视图1 . 在 对象检查器 ,设置 可见 属性到 真的 .
这使主窗格可见。 在主窗格上,双击 添加 按钮,然后实现以下事件处理程序: 对于 德尔福 :
//-------------------------------------------------------------------- //将新创建的联系人添加到通讯簿 程序 T形1 . btnOK单击 ( 发件人 : TObject(目标) ) ; 无功功率,无功功率 联系人 : TAddressBook联系人 ; 电子邮件 : T联系人电子邮件 ; 地址 : T联系人地址 ; 开始 联系人 := 通讯簿1 . 创建联系人 ( 通讯簿1 . 默认源 ) ; 尝试 联系人 . 名字 := 编辑名字 . 文本 ; 联系人 . 姓氏 := 编辑姓氏 . 文本 ; //添加工作邮件 电子邮件 := T联系人电子邮件 . 创建 ; 尝试 电子邮件 . 添加电子邮件 ( T联系电子邮件 . T标签类型 . 工作 , edt工作邮件 . 文本 ) ; 联系人 . 电子邮件 := 电子邮件 ; 最后 电子邮件 . 免费 ; 结束 ; 通讯簿1 . 保存联系人 ( 联系人 ) ; 尝试 列表框1 . 开始更新 ; 添加列表框项 ( 联系人 ) ; 最后 列表框1 . 并且要应用 ; 结束 ; 最后 联系人 . 免费 ; 结束 ; 多视图1 . 隐藏管理员 ; 结束 ; 对于 C++:
//将新创建的联系人添加到通讯簿 空隙 __快速呼叫 T形1 :: btnOK单击 ( TObject(目标) * 发件人 ) { T联系人电子邮件 * 电子邮件 ; TA通讯录联系人 * 联系人 = 通讯簿1 -> 创建联系人 ( 通讯簿1 -> 默认源 ()); __尝试 { 联系人 -> 名字 = 编辑名字 -> 文本 ; 联系人 -> 姓氏 = 编辑姓氏 -> 文本 ; //添加工作邮件 电子邮件 = 新的 T联系人电子邮件 (); __尝试 { 电子邮件 -> 添加电子邮件 ( T联系人电子邮件 :: T标签类型 :: 工作 , edt工作邮件 -> 文本 ); 联系人 -> 电子邮件 = 电子邮件 ; } __最后 { 电子邮件 -> 免费 (); } 通讯簿1 -> 保存联系人 ( 联系人 ); __尝试 { 列表框1 -> 开始更新 (); 添加列表框项 ( 联系人 ); } __最后 { 列表框1 -> 并且要应用 (); } } __最后 { 联系人 -> 免费 (); } 多视图1 -> 隐藏管理员 (); } 在主窗格上,双击 取消 按钮,然后实现以下事件处理程序: 对于 德尔福 :
//清除并关闭“添加新联系人”表单 程序 T形1 . bt取消单击 ( 发件人 : TObject(目标) ) ; 开始 编辑名字 . 文本 := '' ; edt姓氏 . 文本 := '' ; edtWorkMail公司 . 文本 := '' ; 多视图1 . 隐藏管理员 ; 结束 ; 对于 C++:
//清除并关闭“添加新联系人”表单 空隙 __快速呼叫 T形1 :: bt取消单击 ( TObject(目标) * 发件人 ) { 编辑名字 -> 文本 = "" ; 编辑姓氏 -> 文本 = "" ; edt工作邮件 -> 文本 = "" ; 多视图1 -> 隐藏管理员 (); }
保持通讯簿同步
在 对象检查器 ,选择 通讯簿1 ,然后打开 事件 选项卡。 双击旁边的 OnExternalChange(外部更改时) ,然后实现以下事件处理程序: 对于 德尔福 :
程序 T形1 . 通讯簿1外部更改 ( A投标人 : TObject(目标) ) ; 开始 通讯簿1 . 还原当前更改并更新 ; 填充联系人列表 ; 结束 ; 对于 C++:
空隙 __快速呼叫 T形1 :: 通讯簿1外部更改 ( TObject(目标) * A投标人 ) { 通讯簿1 -> 还原当前更改并更新 (); 填充联系人列表 (); }
配置对通讯簿的访问
在 对象检查器 ,选择 表格1 ,然后打开 事件 选项卡。 双击旁边的 在Show上 ,然后实现以下事件处理程序: 对于 德尔福 :
程序 T形1 . 窗体显示 ( 发件人 : TObject(目标) ) ; 开始 //加载联系人时显示此信息框 如果 通讯簿1 . 支持 然后 开始 TDialogService(TDialog服务) . 显示消息 ( '正在加载联系人…' ) ; 通讯簿1 . 请求权限 ; 结束 其他的 显示消息 ( '此平台不支持通讯簿服务' ) ; 结束 ; 对于 C++:
空隙 __快速呼叫 T形1 :: 窗体显示 ( TObject(目标) * 发件人 ) { 如果 ( 通讯簿1 -> 支持 ()) { //加载联系人时显示此信息框 TDialogService(TDialog服务) :: 显示消息 ( “正在加载联系人…” ); 通讯簿1 -> 请求权限 (); } 其他的 { TDialogService(TDialog服务) :: 显示消息 ( “此平台不支持通讯簿服务。” ); } } 注释 要使用 TDialogService。 显示消息 方法,请确保代码包含以下说明: 德尔福 : 使用 FMX公司 . 对话框服务 ; C++:
#包括<FMX。 对话框服务.hpp> 在 对象检查器 ,选择 通讯簿1 ,然后打开 事件 选项卡。 双击旁边的 OnPermission请求 ,然后实现以下事件处理程序: 对于 德尔福 :
程序 T形1 . 通讯簿1权限请求 ( A投标人 : TObject(目标) ; 常量 A消息 : 一串 ; 常量 A访问授权 : 布尔值 ) ; 开始 如果 A访问授权 然后 开始 填写联系人列表 ; 终点 其他的 显示消息 ( '您无法访问通讯簿。 原因:' + A消息 ) ; 结束 ; 对于 C++:
空隙 __快速呼叫 T形1 :: 通讯簿1权限请求 ( TObject(目标) * A投标人 , 常量 Unicode字符串 A消息 , 常量 布尔 A访问授权 ) { 如果 ( A访问授权 ) { 填充联系人列表 (); } 其他的 { 显示消息 ( “您无法访问通讯簿。原因:” + A消息 ); } }
配置Android应用程序以访问通讯簿
在RAD Studio IDE中,打开 项目>选项>使用权限 . 启用以下权限: 获取帐户 读取联系人 写入联系人
运行示例应用程序
在 “项目”窗口 ,选择目标平台(支持的平台:Android或iOS)。 重要 :在Android设备上运行此应用程序之前,请确保已完成以下步骤 配置Android应用程序以访问通讯簿 . 按下 Shift+Ctrl+F9 运行应用程序而不进行调试。