app应用运行中,自动监测手机通讯录的改变,达到同步更新
来源:互联网 发布:java ee jdk下载 编辑:程序博客网 时间:2024/05/17 07:29
我们app应用开发中,有时需要把手机通讯录中的信息同步到我们自己的app应用中。至于如何把手机通讯录中的信息写入到我们自己的应用中,通过iOS系统自带的ABAddressBookRef解析出来,放入到自己创建的sql数据库中。网上已有很多资料和demo,所以在这里就不再详细介绍。(如果各位感觉还是有此需求的话,可以后续加上。)
下面进入今天的主题--今天主要介绍手机通讯录同步到app中后,如果通讯录发生改变,如何让我们的app做到自动同步。
有些app的开发者,把通讯录的同步方法写在didFinishLaunchingWithOptions函数中,这样可以做到每次启动app时,就进行一次同步。但,此方法无法满足在app未杀死,只是进入后台,用户手动进行通讯录的修改的情况。也就是说,如果用户把我们的app进入后台,去修改通讯录,再次从后台打开app时,这种方法将不能做到适时同步。
也有些开发者,把通讯录的同步方法写在applicationDidBecomeActive函数中,这样确实可以做到适时同步,但我们需要考虑一下,性能问题。每次app从后台打开,不管用户的通讯录有没有改变,都进行同步,对我们自己的app性能消耗太大,也不是很好。
也有些开发者,考虑在app中,加一个定时器,固定的一段时间后,进行一次强制同步。这种方法,既不是适时,也无辜的或多或少的降低了我们的app的性能。
所以,这3种方法都不是很好。我们回头再查看下,iOS的系统的addressBook库中的方法。我们会发现一个ABAddressBookRegisterExternalChangeCallback方法。看名称就可看出意思是:注册通讯录是否改变的监听以及回调。所以,我们应用此方法,就可以达到自动适时同步通讯录的效果。
上代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
// 注册监听,监听通讯录是否发生变化
if (!_ntificationaddressbook) {
_ntificationaddressbook = ABAddressBookCreateWithOptions(NULL, NULL);
}
ABAddressBookRegisterExternalChangeCallback(_ntificationaddressbook, MyAddressBookExternalChangeCallback, (__bridge void *)(self));
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// 进入程序后,取消对本地通讯录的监听
ABAddressBookUnregisterExternalChangeCallback(_ntificationaddressbook, MyAddressBookExternalChangeCallback, (__bridge void *)(self));
}
// 监听到通讯录发生改变时的回调事件
void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)
{
}
- app应用运行中,自动监测手机通讯录的改变,达到同步更新
- 手机同步专家--基于SyncML协议同步通讯录的应用软件
- 如何在android手机上实现app开机自动运行启动(可以打开应用界面)。
- Android 开发中我常用的手机App(持续更新)
- Android手机通讯录应用
- VC实现自动监测光驱状态的改变
- VC实现自动监测光驱状态的改变
- VC实现自动监测光驱状态的改变
- 装饰你的手机通讯录-同步微信头像
- 获取手机中通讯录的所有信息
- Android中手机通讯录的获取
- 设置让Tomcat自动监测web app的变化!
- 对手机中安装的app应用进行抓包
- 曾经做的一个需求:如果一个应用在后台运行超过三小时,系统自动杀掉这个应用 以释放内存 来达到内存优化的目的
- 解决:铃声改变,来短信,短信设置中默认铃声的名称没有同步更新
- ios手机通讯录导入应用
- 自制的通讯录APP(SQLite的应用)
- Extjs4.2:运行时修改store的url达到动态改变Grid数据的目的
- poj 2029 Get Many Persimmon Trees
- 傅里叶变换
- MySQL详解(16)-----------海量数据建议
- iOS开发的经典博客和文章汇总
- 插曲:BigDecimal
- app应用运行中,自动监测手机通讯录的改变,达到同步更新
- 状态管理-Session
- spring 整合MyBatis
- 线段树详解(单点更新与成段更新\区间更新操作)
- Chrom 42及以上版本Silverlight不能正确加载的设置方法
- 主机网卡发现所发送数据的目的IP和默认网关不在同一网段(网络)时,会丢弃该数据帧吗???
- leetcode Count Complete Tree Nodes
- LeetCode151_Reverse Words in a String
- jQuery入门:用包装集工作(Working with Selections)