移动教程:使用通讯簿组件(iOS和Android)

来自RAD Studio
跳转到:航行,搜索

转到移动教程:移动应用程序开发(iOS和Android)


在开始本教程之前,建议您阅读并执行以下教程:

FireMonkey提供T通讯录组件与iOS和Android设备上的地址簿协同工作。

本教程描述如何创建一个简单的FireMonkey应用程序,该应用程序使用T通讯录组件。

网间网操作系统 安卓

通讯簿应用程序.png
iPhone 5

通讯录Android.png

安卓(LG-E612)




TAddressBook组件的基本功能

在移动平台(Android和iOS)上,FireMonkey支持T通讯录允许您的应用程序访问设备通讯簿的组件。该组件的基本特征如下:

  • 发送访问设备通讯簿的请求并获取访问状态。
  • 访问设备通讯簿中定义的所有源。
  • 正在从指定的源获取所有或单个联系人。
  • 正在获取指定组中的所有联系人。
  • 编辑或删除现有联系人和组。
  • 创建新联系人。
  • 创建新组。

创建示例应用程序

本节帮助您开发一个示例应用程序(适用于Android和iOS目标平台),该应用程序演示了T通讯录组件。该应用程序演示了以下技术:

  • 请求访问通讯簿的权限。
  • 从默认联系人中检索所有联系人来源在设备通讯簿中。
  • 将新联系人添加到通讯簿。
  • 正在从通讯簿中删除选定的联系人。

设计用户界面

  1. 创建空白多设备应用程序,通过选择:
    • 对于德尔福:文件>新建>多设备应用程序-Delphi>空白应用程序
    • 对于C类++:文件>新建>多设备应用程序-C++Builder>空白应用程序
  2. “项目”窗口,将目标平台设置为Android或iOS。
  3. 工具选项板,选择T工具栏,T通讯录、和列表框组件组件并将其放置在表单设计器.
  4. 对象检查器,设置排列的属性列表框组件顾客.
  5. 表单设计器,右键单击列表框组件,然后在快捷菜单上选择添加项目>TSearchBox.
  6. 工具选项板,选择T多视图组件,并将其放置在表单设计器.

设计应用程序工具栏和主窗格

将所有控件元素放置在工具栏和主窗格上:

  • 工具栏包含三个速度按钮:
    • 添加垃圾桶.png:从通讯簿中删除选定的联系人。
    • 地址刷新.png:刷新当前联系人列表。
    • 地址Add.png:打开主窗格以将新联系人添加到通讯簿。
  • 主窗格提供了一个表单,用于指定新联系人并将其添加到通讯簿中。

要设计应用程序工具栏,请执行以下操作:

  1. 在顶部工具栏上,放置三个T速度按钮组件。
  2. 表单设计器,请执行以下操作:
    • 选择速度按钮1,并设置姓名样式查找属性到bt删除垃圾处理工具按钮已排序分别是。
    • 选择速度按钮2,并设置姓名样式查找属性到bt刷新按顺序刷新工具按钮分别是。
    • 选择速度按钮3,并设置姓名样式查找属性到btn添加按顺序添加工具按钮分别是。

执行上述步骤后,您的表单设计器将类似于以下屏幕:通讯录工具栏.png

要设计主窗格,请执行以下操作:

  1. 结构视图,选择多视图1,然后在对象检查器,指定以下属性:
    • 设置主控按钮属性到btn添加.
    • 设置模式属性到抽屉.
    • 要使多视图1可见,设置可见属性到真的.
  2. 工具选项板,选择三个T标签组件,三个T编辑组件,和两个按钮控件组件,并将其放置到多视图1.
  3. 对象检查器,指定已放置到的控件元素的以下属性多视图1:
    • 对于标签1,标签2、和标签3:设置文本属性到名字,、和工作邮件分别是。
    • 对于编辑1,编辑2、和编辑3:
    • 对于按钮1按钮2:
      • 设置文本属性到添加取消
      • 设置姓名属性到btnOK(确定)取消按钮分别是。

我们建议您按以下方式排列主窗格的控制元素:

通讯簿抽屉.png

检索联系人列表

本节介绍如何从设备通讯簿中的默认源检索联系人列表。

在应用程序中,定义以下私有方法:

  • 填充联系人列表:获取设备通讯簿中默认源的联系人列表;
  • 添加列表框项:将新项目添加到列表框.

对应用程序代码的Private部分进行以下更改:

德尔福:

私有的
    {私有声明}
    程序 填写联系人列表;
    程序 添加列表框项(联系人: TAddressBook联系人);

C++生成器:

私有的:	//用户声明
	空隙 __快速呼叫 填充联系人列表();
        空隙 __快速呼叫 添加列表框项(TAddressBook联系人 *联系人);

实施填充联系人列表添加列表框项方法如下:

德尔福:

//填写联系人列表
程序 T形1.填写联系人列表;
无功功率,无功功率
  : 整数;
  联络: TAddressBook联系人;
开始
  联络 := TAddressBook联系人.创建;
  尝试
    通讯簿1.所有联系人(通讯簿1.默认源, 联络);
    列表框1.开始更新;
    尝试
      列表框1.清除;
      对于  := 0  联络.计数 - 1 
        添加列表框项(联络.项目[]);
    最后
      列表框1.并且要应用;
    结束;
  最后
    联络.免费;
  结束;
结束;
// --------------------------------------------------------------------
//将新联系人添加到列表框
程序 T形1.添加列表框项(联系人: TAddressBook联系人);
无功功率,无功功率
  列表框项目: T列表框项目;
开始
  尝试
    列表框项目 := T列表框项目.创建();
    列表框项目.文本 := 联系人.显示名称;
    列表框项目.标签 := 联系人.身份证件;
    列表框1.添加对象(列表框项目);
  最后
    列表框项目.免费;
  结束;
结束;

C++生成器:

//用现有联系人显示名称填充列表框。
空隙 __快速呼叫 T形1::填充联系人列表() {
	整数 ;
	TAddressBook联系人 *联络 = 新的 TAddressBook联系人(); 
	__尝试 {
		通讯簿1->所有联系人(通讯簿1->默认来源(), 联络);
		__尝试 {
			列表框1->开始更新();
			列表框1->清除();
			对于 ( = 0;  < 联络->计数; ++)
				添加列表框项(联络->项目[]);

		}
		__最后 {
			列表框1->并且要应用();
		}
	}

	__最后 {
		联络->免费();
	}
}
// ---------------------------------------------------------------------------
//将新联系人添加到列表框
空隙 __快速呼叫 T形1::添加列表框项(TAddressBook联系人 *联系人) {
    T列表框项目 *列表框项目 = 新的 T列表框项目(列表框1);

	__尝试 {

		列表框项目->文本 = 联系人->显示名称;
		列表框项目->标签 = 联系人->身份证件;
		列表框1->添加对象(列表框项目);
	}
	__最后 {
		列表框项目->免费();
	}
}

实现控制元素功能

要完成应用程序开发,您应该为拖放到应用程序窗体中的所有控件元素实现事件处理程序。

要实现速度按钮的OnClick事件处理程序,请执行以下操作:

  1. 表单设计器,双击速度按钮(bt刷新bt删除).
  2. 代码编辑器,为每个按钮指定以下事件处理程序:

德尔福:

//-------------------用于删除按钮-----------------------------------------
程序 T形1.bt删除单击(发件人: TObject(目标));
无功功率,无功功率
  联系人索引, 联系人ID: 整数;
  联系人: TAddressBook联系人;
开始
  联系人索引 := 列表框1.项目索引;
  如果 (联系人索引 > -1) 然后
  开始
    联系人ID := 列表框1.ListItems(列表项)[联系人索引].标签;
    联系人 := 通讯簿1.联系人(按ID)(联系人ID);
    如果 联系人 <>  然后
      尝试
        通讯簿1.删除联系人(联系人);
        列表框1.开始更新;
        列表框1.项目.删除(联系人索引);
      最后
        列表框1.并且要应用;
        联系人.免费;
      结束;
  结束;
结束;
//-------------------用于“刷新”按钮---------------------------------------
程序 T形1.btn刷新单击(发件人: TObject(目标));
开始
  填充联系人列表;
结束;

C++生成器:

//-------------------用于删除按钮-----------------------------------------
//从列表框中删除当前选定的联系人
空隙 __快速呼叫 T形1::bt删除单击(TObject(目标) *发件人) {
	整数 联系人索引 = 列表框1->项目索引;
	如果 (联系人索引 > -1) {
		整数 联系人ID = 列表框1->ListItems(列表项)[联系人索引]->标签;
		TAddressBook联系人 *联系人 = 通讯簿1->联系人(按ID)(联系人ID);
		如果 (联系人 = 无效的) {
			__尝试 {
				通讯簿1->删除联系人(联系人);
				列表框1->开始更新();
				列表框1->项目->删除(联系人索引);

			}
			__最后 {
				列表框1->并且要应用();
				联系人->免费();

			}
		}
	}
}
//---------------------------“刷新”按钮-------------------------------------
空隙 __快速呼叫 T形1::bt刷新单击(TObject(目标) *发件人) {
	填充联系人列表();
}

要实现主窗格按钮的onClick事件处理程序,请执行以下操作:

  1. 结构视图,选择多视图1.
  2. 对象检查器,设置可见属性到真的.
    这使主窗格可见。
  3. 在主窗格上,双击添加按钮,然后实现以下事件处理程序:
    • 对于德尔福:
     
    //--------------------------------------------------------------------
    //将新创建的联系人添加到通讯簿
    程序 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->隐藏管理员();	
    }
    
  4. 在主窗格上,双击取消按钮,然后实现以下事件处理程序:
    • 对于德尔福:
     
    //清除并关闭“添加新联系人”表单
    程序 T形1.bt取消单击(发件人: TObject(目标));
    开始
      编辑名字.文本 := '';
      edt姓氏.文本 := '';
      edtWorkMail公司.文本 := '';
      多视图1.隐藏管理员;
    结束;
    
    • 对于C++:
    //清除并关闭“添加新联系人”表单
    空隙 __快速呼叫 T形1::bt取消单击(TObject(目标) *发件人)
    {
    	编辑名字->文本 = "";
    	编辑姓氏->文本 = "";
    	edt工作邮件->文本 = "";
    	多视图1->隐藏管理员();
    }
    

保持通讯簿同步

也许某些第三方工具在应用程序运行时会更改设备通讯簿。在这种情况下,重要的是保持设备通讯簿和应用程序直接使用的通讯簿实例之间的信息同步。为此,FireMonkey提供了T通讯录。还原当前更改并更新方法。

保持通讯簿同步

  1. 对象检查器,选择通讯簿1,然后打开事件选项卡。
  2. 双击旁边的OnExternalChange(外部更改时),然后实现以下事件处理程序:
    • 对于德尔福:
     
    程序 T形1.通讯簿1外部更改(A投标人: TObject(目标));
    开始
      通讯簿1.还原当前更改并更新;
      填充联系人列表;
    结束;
    
    • 对于C++:
    空隙 __快速呼叫 T形1::通讯簿1外部更改(TObject(目标) *A投标人) {
    	通讯簿1->还原当前更改并更新();
    	填充联系人列表();
    }
    

配置对通讯簿的访问

使用前T通讯录,您的应用程序应该请求访问目标移动设备上的通讯簿的权限。

本节提供配置Android和iOS应用程序以访问目标移动设备上的通讯簿的步骤。

要请求访问通讯簿的权限,请执行以下操作:

  1. 对象检查器,选择表格1,然后打开事件选项卡。
  2. 双击旁边的在Show上,然后实现以下事件处理程序:
    • 对于德尔福:
     
    程序 T形1.窗体显示(发件人: TObject(目标));
    开始
      //加载联系人时显示此信息框
      如果 通讯簿1.支持 然后
      开始
        TDialogService(TDialog服务).显示消息('正在加载联系人…');
        通讯簿1.请求权限;
      结束
      其他的
        显示消息('此平台不支持通讯簿服务');
    
    结束;
    
    • 对于C++:
    空隙 __快速呼叫 T形1::窗体显示(TObject(目标) *发件人) {
    	如果 (通讯簿1->支持()) {
    		//加载联系人时显示此信息框
    		TDialogService(TDialog服务)::显示消息(“正在加载联系人…”);
    		通讯簿1->请求权限();
    	}
    	其他的 {
    		TDialogService(TDialog服务)::显示消息
    			(“此平台不支持通讯簿服务。”);
    	}
    }
    

    注释要使用TDialogService。显示消息方法,请确保代码包含以下说明:

    德尔福:

    使用
      FMX公司.对话框服务;
    

    C++:

    #包括<FMX。对话框服务.hpp>
    
  3. 对象检查器,选择通讯簿1,然后打开事件选项卡。
  4. 双击旁边的OnPermission请求,然后实现以下事件处理程序:
    • 对于德尔福:
     
    程序 T形1.通讯簿1权限请求(A投标人: TObject(目标);
      常量 A消息: 一串; 常量 A访问授权: 布尔值);
    开始
     如果 A访问授权 然后
       开始
          填写联系人列表;     
       终点
                       其他的
          显示消息('您无法访问通讯簿。原因:' + A消息);
    
    
    结束;
    
    • 对于C++:
    空隙 __快速呼叫 T形1::通讯簿1权限请求(TObject(目标) *A投标人,
    	常量 Unicode字符串 A消息, 常量 布尔 A访问授权) {
    
    	如果 (A访问授权) {
    		填充联系人列表();
    
    	}
    	其他的 {
    		显示消息(“您无法访问通讯簿。原因:” + A消息);
    	}
    }
    

配置Android应用程序以访问通讯簿

在运行使用T通讯录组件,您需要配置一些使用权限用于您的项目。

配置使用权限:

  1. 在RAD Studio IDE中,打开项目>选项>使用权限.
  2. 启用以下权限:
    • 获取帐户
    • 读取联系人
    • 写入联系人

运行示例应用程序

要运行此应用程序,请执行以下操作:

  1. “项目”窗口,选择目标平台(支持的平台:Android或iOS)。

    重要:在Android设备上运行此应用程序之前,请确保已完成以下步骤配置Android应用程序以访问通讯簿.

  2. 按下Shift+Ctrl+F9运行应用程序而不进行调试。

要测试您的应用程序,您可以使用以下场景。

将新联系人添加到通讯簿

  1. 在应用程序工具栏上,轻按地址Add.png.
    这将打开主窗格。
  2. 在主窗格中,在名字,姓氏、和工作邮件文本框。完成后,轻触添加将新创建的联系人添加到通讯簿。

    添加联系人iOS.png



删除联系人

  1. 在联系人列表中,轻触要删除的联系人。
  2. 在应用程序工具栏上,轻按地址垃圾.png
    注意! 这将从设备通讯簿中删除联系人,而不显示确认提示!

    删除联系人iOS.png

另请参见

代码示例