一种实现内存与用户识别卡数据同步的方法及终端
本申请是2014年06月26日提出的发明名称为“一种实现内存与用户识别卡数据同步的方法及终端”的中国发明专利申请201410289839.1的分案申请。
技术领域
本发明涉及通信终端数据处理领域,特别是涉及一种实现内存与用户识别卡数据同步的方法及终端。
背景技术
通信终端在存储数据时可根据需要存储到内存ROM或用户识别卡,例如sim(subscriber identity module,用户识别模块)卡。当更换用户识别卡后,例如将sim卡从通信终端A更换到通信终端B,用户希望直接读取卡中的电话号码或短信息等内容,而不需要先将存储于通信终端A内存中的数据转移到通信终端B中,然后从通信终端B中读取,因此,用户优先选择将重要数据存放于用户识别卡中。
以短信为例,现有一种管理用户识别卡中数据的方法是在内存开辟一块存储区域,开机后,调用一次framework层的读卡接口将卡中的短信信息存放于该存储区域中与终端本地的数据进行统一管理,这样用户需要查询卡中短信时,只需访问终端内存,不需要读取用户识别卡,减少了卡的读写次数,提高访问速度。
发明人在实现本发明的过程中发现现有技术存在如下的缺陷:用户识别卡或内存中的数据不是固定不变的,例如当sim卡接收短信或将终端本地的号码复制到sim卡中或删除内存中的短信时,而一旦发生变化,终端就需要再次重新读取用户识别卡中的所有数据,以同步内存与用户识别卡中的数据。而其中有一些数据是不变的,如果重新读取一遍,则增加了同步的时间。
发明内容
本发明提供了一种实现内存与用户识别卡数据同步的方法及终端,可在开机读取用户识别卡中的数据后,维持内存与卡中数据同步,提高同步速度。
为了解决上述问题,本发明公开了一种实现内存与用户识别卡数据同步的方法,包括以下步骤:
在所述内存中建立数据表,并建立预设索引值与用户识别卡中存储位置的映射关系,用户识别卡数据存储于所述存储位置;将所述预设索引值及所述用户识别卡数据存储于所述数据表中;获取所述用户识别卡中发生变化的数据的预设索引值,根据所述预设索引值将用户识别卡中对应的数据更新到所述数据表中;或者,获取所述数据表中发生变化的数据的预设索引值,根据所述索引值将数据表中对应的数据更新到所述用户识别卡中。
本发明的另一目的是提供一种实现内存与用户识别卡数据同步的终端,包括:
内存,用于建立数据表;用户识别卡,用于建立预设索引值与用户识别卡中存储位置的映射关系,用户识别卡数据存储于所述存储位置;存储单元,用于将所述预设索引值及所述用户识别卡数据存储于所述数据表中;同步单元,用于获取所述用户识别卡中发生变化的数据的预设索引值,根据所述预设索引值将用户识别卡中对应的数据更新到所述数据表中;或者,获取所述数据表中发生变化的数据的预设索引值,根据所述索引值将数据表中对应的数据更新到所述用户识别卡中。
与现有技术相比,本发明包括以下优点:
本发明中,在完成了内存数据的初始化后,即将用户识别卡中的数据存储到内存数据表中,使内存与用户识别卡的数据内容一致。后续一旦用户识别卡的数据或者内存数据表的数据发生变化,获取发生变化的数据的预设索引值,根据预设索引值与用户识别卡中存储位置的映射关系,找到相应的数据内容,只需读取发生变化的数据并同步到内存数据表或用户数据卡即可,无需读取用户数据卡的全部内容,提高了同步的速度。
附图说明
图1是本发明一实施例实现内存与用户识别卡数据同步的方法流程图;
图2是本发明一实施例的实现内存与用户识别卡数据同步的数据流图;
图3为本发明一实施例的实现内存与用户识别卡数据同步的终端结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
通信终端,例如手机中,提供了一种统一管理本地数据与用户识别卡数据的方法,将用户识别卡中的数据对应到内存的一块存储区域,避免每次需要查询卡中对应的数据时,都从用户识别卡中读取。本发明正是基于这种统一管理的方法所作出的改进。
参照图1,为本发明一实施例实现内存与用户识别卡数据同步的方法流程图。本发明提供一种实现内存与用户识别卡数据同步的方法,包括以下步骤:
步骤101:在所述内存中建立数据表,并建立预设索引值与用户识别卡中存储位置的映射关系,用户识别卡数据存储于所述存储位置。
本发明中,用户识别卡可以包括sim卡、ruim卡、及usim卡,卡中的数据可以为号码信息和/或短信信息。
以用户识别卡为sim卡,卡内数据为短信信息为例,首先在手机内存的信息数据库provider中建立数据表iccsms表,其中,provider用于保存手机所有的短信信息,包括本地短信和sim卡内的短信。
本实施例中预设索引值用于规定sim卡中的物理存储位置的顺序,例如sim卡中最多可存储60条短信,则索引值为1-60。建立预设索引值与存储位置的映射关系,这种关系是一一对应的关系,例如预设索引值为1,对应的是第一条短息。需要说明的是,当短信从某个存储位置删除,对应存储位置的预设索引值仍然存在。
步骤102:将所述预设索引值及所述用户识别卡数据存储于所述数据表中。
本步骤是对数据表初始化的过程。示例性地,android系统在手机开机时发送BOOT_COMPLETED广播,手机接收广播后启动SmsService,在framework层短信的接口类SmsManager中调用getAllMessagesFromIcc标准读卡接口函数,从而获取sim卡中的预设索引值及短信信息,并从所述短信信息中提取出信息内容,发送或接收时间,信息类型等内容。然后,调用sqlite insert 函数将上述获取的内容插入iccsms表,完成数据表的初始化。
为了进一步增加本方案的稳定性,还增加了相关保护措施,例如在低内存手机中,由于开机进行相关操作的服务很多,根据android的内核机制,应用的服务在后台经常被关闭,初始化数据表时由于读卡时间较长,很容易在没有读完卡中短信时服务已经被关闭。针对此种情况,在读取所述用户识别卡中数据的服务中加入休眠锁,此时android内核发现该服务有休眠锁会提高服务的优先级,避免被内核关闭。
步骤103:获取所述用户识别卡中发生变化的数据的预设索引值,根据所述预设索引值将用户识别卡中对应的数据更新到所述数据表中;或者,获取所述数据表中发生变化的数据的预设索引值,根据所述索引值将数据表中对应的数据更新到所述用户识别卡中。
在一实施例中,所述用户识别卡中发生变化的数据包括添加的数据。在另一实施例中,所述数据表中发生变化的数据包括修改或删除的数据。下面,通过以下各个实施例对这两种情况进行详细介绍。
实施例一:
本实施例中步骤201-202与步骤101-102相同,在此不再赘述。
步骤203:当用户识别卡中的数据发生变化时,获取该数据所处存储位置所对应的预设索引值,根据所述预设索引值将用户识别卡中对应的数据更新到所述数据表中。
参加图3,为本发明一实施例的实现内存与用户识别卡数据同步的数据流图。本实施例中发生变化的数据包括添加的数据,例如预先设置短信存储器为sim卡,当接受新短信时,modem会直接将短信存储在sim卡中。此时在framework层,调用SimRecords读取sim卡中所有目录的信息,包括预设索引值index值,并通过非标准广播的方式告之信息服务service,service此时知道卡中已经收取短信,通过广播方式获取到index值,并根据此index值读取sim卡中该index对应的短信信息,包括信息内容,发送或接收时间,信息类型等内容。将获取到的短信信息连同index值同步保存到iccsms表,保证数据表中数据与sim卡中数据的同步。
优选情况下,当sim卡中短信满时,modem会将优先存储器自动设置为手机,此时终端来短信的时候是按照手机正常上报短信的流程进行处理的,避免卡中短信满造成Modem拒绝接收短信的问题。
用户识别卡中发生变化数据包括添加的数据的情况还可以是将手机本地的短信复制到sim卡中。此时获取被复制的短信信息,调用数据库provider接口,在provider中再调用卡短信复制函数,此时注意,如果调用原生接口,返回的只是复制成功或者失败结果,无法获取到复制到sim卡中的短信index值。本方案中扩充原生接口,并修改framework层相应的接口函数,使其能够返回index值。如果复制成功,将返回的index值和调用卡短信复制函数获取到的短信信息一并插入到数据库的iccsms表中。如果失败,不执行数据库的插入操作,将结果反馈给用户。
优选情况下,获取所述用户识别卡中发生变化的数据的预设索引值之前包括:判断所述用户识别卡中的数据是否达到预设的存储上限,是则结束流程;否则继续流程。例如当用户在手机界面进行复制操作的时候,从数据表中可以知道sim卡中短信的数量,从而可以判断sim卡中的短信是否已经满,如果已经满则直接反馈给用户,此时不能复制短信到sim卡。
本发明实施例保证了当用户识别卡有新添加的数据时,只需获取发生变化的数据的预设索引值,根据预设索引值与用户识别卡中存储位置及其存储的数据的映射关系,找到相应的数据内容,插入到数据表中,更新数据表的数据。对于其他没有变化的数据,无需读取,从而提高了数据同步的速度。
实施例二:
本实施例中步骤301-302与步骤101-102相同,在此不再赘述。
步骤303:当所述数据表中的数据发生变化时,获取所述数据表中发生变化的数据的预设索引值,根据所述索引值将数据表中对应的数据更新到所述用户识别卡中。
本实施例中发生变化的数据包括修改或删除的数据。例如当用户需要删除sim卡中的短信时,首先在手机界面上显示sim卡中的所有短信,选取短信进行删除。由于本方案是从内存中读取数据,此时删除的只是内存中的短信,因此还需要将sim卡对应的短信一并删除。具体做法是根据用户选取的短信获取原先已保存在数据表中对应的index值,当用户确认删除时,调用标准的卡上短信删除函数deleteMessageFromIcc,将index值传入到该函数中,经过framework层,使Modem进行sim卡中短信删除操作。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
实施例三:
参加图3,为本发明一实施例的实现内存与用户识别卡数据同步的终端结构框图。在本实施例中,提供一种实现内存与用户识别卡数据同步的终端,包括:
内存,用于建立数据表401;
用户识别卡402,用于建立预设索引值与用户识别卡中存储位置的映射关系,用户识别卡数据存储于所述存储位置;
存储单元403,用于将所述预设索引值及所述用户识别卡数据存储于所述数据表中;
同步单元404,用于获取所述用户识别卡中发生变化的数据的预设索引值,根据所述预设索引值将用户识别卡中对应的数据更新到所述数据表中;或者,获取所述数据表中发生变化的数据的预设索引值,根据所述索引值将数据表中对应的数据更新到所述用户识别卡中。
其中,所述用户识别卡中发生变化的数据包括添加的数据,此时同步单元还用于判断所述用户识别卡中的数据是否达到预设的存储上限,是则结束流程;否则继续获取所述用户识别卡中发生变化的数据的预设索引值。
所述数据表中发生变化的数据包括修改或删除的数据。
所述用户识别卡中的数据包括号码信息或短信信息。
所述存储单元还用于开机时创建读取所述用户识别卡中数据的服务,并提高所述服务的优先级。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种实现内存与用户识别卡数据同步的方法及终端,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。