本发明涉及电子技术,尤其涉及一种闪光灯打开方法和装置。
背景技术:
大部分智能设备都配置有闪光灯。随着闪光灯的配置,出现了大量运用闪光灯的应用,例如,用来照明的手电筒应用、使用闪光灯达到补光目的的相机应用等。目前,闪光灯有两种打开方式:可以被抢占式与独占式。所谓可以被抢占式是指,后打开闪光灯的应用具有优先权,后打开闪光灯的应用抢占正在占用闪光灯应用的使用权,正在使用闪光灯的应用会自动释放对闪光灯的使用。也就是说,在先应用打开闪光灯的时候,闪光灯可以被其它应用抢占,闪光灯被抢占后在先应用自动放弃对闪光灯的使用。而独占式是指,先打开闪光灯的应用具有优先权,在释放闪光灯使用权之前,其它应用是无法申请到闪光灯的使用权。
对于每个使用闪光灯的应用来说,闪光灯的打开方式不仅是统一的,而且在终端出厂之前已确定。也就是说,智能设备上每个使用闪光灯的应用,打开闪光灯的方式都是一样的,要么都是独占式,要么都是抢占式。因此,现有打开闪光灯的方法,没有考虑应用的需求,打开闪光灯的方式不合理。
技术实现要素:
本发明的目的在于,针对现有技术中闪光灯的使用权分配不合理的问题,提出一种闪光灯打开方法和装置,在打开闪光灯时考虑到了应用申请打开闪光灯的方式,实现了合理分配闪光灯使用权的目的。
为实现上述目的,本发明提供的闪光灯打开方法包括:
接收当前应用发起的打开闪光灯申请,所述申请包括所述当前应用申请打开闪光式的方式;
根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯;所述闪光灯的当前模式为在先应用打开闪光灯的方式;所述闪光灯的状态包括打开和关闭;
在所述闪光灯的当前状态为打开且确定为所述当前应用打开闪光灯时,为在先应用关闭闪光灯并通知在先应用;
在确定为当前应用打开闪光灯情况下,根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
进一步地,所述根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯,包括:
在闪光灯的当前状态为关闭或闪光灯的当前模式不是独占式时,确定为所述当前应用打开闪光灯;
在闪光灯的当前状态为打开且闪光灯的当前模式为独占式时,确定不能为所述当前应用打开闪光灯。
进一步地,若闪光灯的当前模式为允许临时抢占式,在所述为在先应用关闭闪光灯并通知在先应用之后,还包括:
保存闪光灯关闭前的信息;
将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式之后,还包括:
在所述当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息打开闪光灯,并通知所述在先应用闪光灯的打开结果。
进一步地,若闪光灯的当前模式为允许临时抢占式,所述根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯,还包括:
在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且临时抢占的嵌套标识为零时,确定为所述当前应用打开闪光灯,并对所述临时抢占的嵌套标识进行加一操作;所述临时抢占的嵌套标识的初始值为零;
在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且所述临时抢占的嵌套标识等于一时,确定不为所述当前应用打开闪光灯。
为实现上述目的,本发明提供的闪光灯打开装置包括:
接收模块,用于接收当前应用发起的打开闪光灯申请,所述申请包括所述当前应用申请打开闪光式的方式;
确定模块,用于根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯;所述闪光灯的当前模式为在先应用打开闪光灯的方式;所述闪光灯的状态包括打开和关闭;
关闭模块,用于在所述确定模块确定所述闪光灯的当前状态为打开且确定为所述当前应用打开闪光灯时,为在先应用关闭闪光灯并通知在先应用;
打开模块,用于在所述确定模块确定为当前应用打开闪光灯情况下,根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
进一步地,所述确定模块具体为:在闪光灯的当前状态为关闭或闪光灯的当前模式不是独占式时,确定为所述当前应用打开闪光灯;在闪光灯的当前状态为打开且闪光灯的当前模式为独占式时,确定不能为所述当前应用打开闪光灯。
进一步地,所述装置还包括:
恢复模块,用于若闪光灯的当前模式为允许临时抢占模式,在所述关闭模块为在先应用关闭闪光灯并通知在先应用之后,保存闪光灯关闭前的信息;在所述打开模块将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式之后,在当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息打开闪光灯,并通知在先应用闪光灯的打开结果。
进一步地,所述确定模块,还用于:在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且临时抢占的嵌套标识为零时,确定为所述当前应用打开闪光灯,并对所述临时抢占的嵌套标识进行加一操作;所述临时抢占的嵌套标识的初始值为零;在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且所述临时抢占的嵌套标识等于一时,确定不为所述当前应用打开闪光灯。
本发明提供的技术方案中,应用申请打开闪光灯时,在申请中包括应用申请打开闪光式的方式。闪光灯管理服务根据闪光灯的当前状态和在先应用打开闪光灯的方式,确定为应用打开闪光灯后,将闪光灯的当前模式更新为该应用申请打开闪光灯的方式,以便在该应用打开闪光灯时如果其它应用申请打开闪光灯时根据闪光灯的当前模式,确定是否为其它应用打开闪光灯。由于本发明在打开闪光灯时考虑到了应用申请打开闪光灯的方式,实现了合理分配闪光灯使用权的目的。
附图说明
图1A为本发明提供的使用闪光灯的框架图;
图1B为本发明提供的一种闪光灯打开方法流程图;
图2为本发明提供的另一种闪光灯打开方法流程图;
图3为本发明提供的一种Session数据结构和Session栈示意图;
图4为本发明提供的一种闪光灯打开装置结构示意图;
图5为本发明提供的另一种闪光灯打开装置结构示意图。
具体实施方式
如图1A所示,闪光灯与应用之间加入闪光灯管理服务(Flash Manager Service),每个应用对闪光灯的操作都通过闪光灯管理服务来进行,并且申请打开闪光灯的应用与闪光灯管理服务进行交互式通讯来获得应用打开闪光灯的方式。
图1B为本发明提供的一种闪光灯打开方法流程图。如图1B所示,本实施例提供的方法包括:
步骤101:闪光灯管理服务接收当前应用发起的打开闪光灯申请,所述申请包括所述当前应用申请打开闪光式的方式;
本发明中闪光灯的打开方式,由应用申请打开方式,具体地,可以由用户通过应用提供的用户接口选择闪光灯打开方式,也可以是智能设备的操作系统根据应用的优先级事先确定闪光灯打开方式。当前应用申请打开闪光式的方式可以是独占式也可以是可以被抢占式。
步骤102:闪光灯管理服务根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯;所述闪光灯的当前模式为在先应用打开闪光灯的方式;
闪光灯的状态包括打开和关闭。闪光灯的当前状态是指当前应用申请打开闪光灯时,闪光灯的状态,也就是闪光灯处于关闭状态或打开状态。闪光灯的模式包括可以被抢占式和独占式。闪光灯的当前模式为在先应用打开闪光灯的方式。在先使用是指已打开闪光灯的应用。
如果闪光灯的当前状态为关闭,那么闪光灯管理服务确定为当前应用打开闪光灯。如果闪光灯的当前状态为打开,而且闪光灯的当前模式不是独占式,那么闪光灯管理服务确定为当前应用打开闪光灯。例如,闪光灯的当前状态为打开,而且闪光灯的当前模式是可以被抢占式,那么闪光灯管理服务确定为当前应用打开闪光灯。在闪光灯处于打开状态且闪光灯的当前模式为独占式时,确定不能为所述当前应用打开闪光灯。
可选地,本发明增加了一种新的闪光灯打开方式:允许临时抢占式。应用以临时抢占式打开闪光灯时,在闪光灯处于打开状态时闪光灯可以被其它应用抢占,其它应用使用完闪光灯后,闪光灯管理服务重新为在先应用打开闪光灯,即将闪光灯使用权分配给在先应用。因此,在闪光灯的当前状态为打开且闪光灯的当前模式为允许临时抢占模式时,那么闪光灯管理服务确定为当前应用打开闪光灯。
步骤103:在确定为当前应用打开闪光灯且闪光灯的当前状态为打开时,闪光灯管理服务为在先应用关闭闪光灯并通知在先应用;
在确定为当前应用打开闪光灯且闪光灯的当前状态为关闭时,闪光灯管理服务直接执行步骤104,不需要执行步骤103。
步骤104:闪光灯管理服务在确定为当前应用打开闪光灯情况下,根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
在确定为当前应用打开闪光灯时,不论闪光灯的当前状态是打开还是关闭,均需执行步骤104,也就是,闪光灯管理服务根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
可选地,若闪光灯的当前模式为允许临时抢占式,在所述为在先应用关闭闪光灯并通知在先应用之后,即步骤103之后还包括:保存闪光灯关闭前的信息;将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式之后,还包括:在当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息打开闪光灯,并通知在先应用闪光灯的打开结果。
具体地,如果闪光灯的当前状态为打开且闪光灯的当前模式为允许临时抢占式,闪光灯管理服务为所述在先应用关闭闪光灯,同时保存闪光灯关闭前的信息,并通知在先应用有新的打开闪光灯的申请到来,根据当前应用的申请打开闪光灯,将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,并通知当前应用闪光灯的打开结果,在当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息打开闪光灯,并通知在先应用闪光灯的打开结果。
本发明提供的闪光灯打开方法,应用在向闪光灯管理服务申请打开闪光灯时,在申请中包括应用申请打开闪光式的方式。闪光灯管理服务根据闪光灯的当前状态和在先应用打开闪光灯的方式,确定为应用打开闪光灯后,将闪光灯的当前模式更新为该应用申请打开闪光灯的方式,以便在该应用打开闪光灯时如果其它应用申请打开闪光灯时根据闪光灯的当前模式,确定是否为其它应用打开闪光灯。由于本发明在打开闪光灯时考虑到了应用申请打开闪光灯的方式,实现了合理分配闪光灯使用权的目的。
图2为本发明提供的另一种闪光灯打开方法流程图。如图2所示,本实施例提供的方法包括:
步骤201:闪光灯管理服务接收当前应用发起的打开闪光灯申请,所述申请包括所述当前应用申请打开闪光式的方式;
步骤202:闪光灯管理服务判断闪光灯的当前状态是否为关闭,如果是,执行步骤203,否则,执行步骤204。
步骤203:闪光灯管理服务根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
步骤204:闪光灯的当前状态为打开且闪光灯的当前模式为可以被抢占式,闪光灯管理服务为在先应用关闭闪光灯并通知在先应用,之后执行步骤203。
步骤205:闪光灯的当前状态为打开且闪光灯的当前模式为允许临时抢占式,闪光灯管理服务为所述在先应用关闭闪光灯,同时保存闪光灯关闭前的信息,并通知在先应用有新的打开闪光灯的申请到来,根据当前应用的申请打开闪光灯,将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,并通知当前应用闪光灯的打开结果,在当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息为在先应用打开闪光灯,并通知在先应用闪光灯的打开结果。
例如,如果手电筒应用以允许临时被抢占式申请打开闪光灯,相机应用在申请打开闪光灯时,闪光灯管理服务为手电筒应用关闭闪光灯,并保存闪光灯关闭前的信息,通知手电筒应用有新的应用到来即相机应用到来,然后为相机应用打开闪光灯,将闪光灯的当前模式更新为相机应用申请打开闪光灯的方式,在相机应用释放对闪光灯的使用后,根据先前保存的闪光灯信息为手电筒应用打开闪光灯,并通知手电筒应用闪光灯的打开结果。可以实现以下场景:用户晚上开着手电筒应用,看到比较好的夜景需要使用相机打开闪光灯进行拍摄,用户希望在拍摄完后继续使用手电筒照明。
步骤206:闪光灯的当前模式为独占式,闪光灯管理服务通知当前应用不能打开闪光灯。
对于允许临时抢占式,可以采取单级嵌套或者多级嵌套的方式。所谓单级嵌套,指的是只允许抢占一次,通过抢占其它应用的闪光灯使用权的应用,即使该应用申请打开闪光灯的方式为临时抢占模式,也不再允许其它应用打开闪光灯。多级嵌套,指的是允许闪光灯被多次抢占,只要应用申请闪光灯的方式为允许临时抢占式,那么不管该应用是否是通过抢占其它应用打开的闪光灯,闪光灯都可以被其它应用抢占。而多级嵌套则复杂的多,具体可通过栈操作来达到目的。每当一个应用以临时抢占式申请闪光灯,如图3所示,闪光灯管理服务为该应用分配一个类型名为Session的数据结构,用来保存闪光灯的当前数据即闪光灯关闭前的信息,包括闪光灯的工作信息和与应用交互的通讯接口。当有其它应用来抢占闪光灯时,则将该Session数据结构入栈,以此类推;而当应用释放对闪光灯的使用权时,则该Session数据结构出栈,并根据出栈的Session数据结构中的数据为应用打开闪光灯,并通知关联应用闪光灯的打开结果。
闪光灯的当前状态为打开且闪光灯的当前模式为允许临时抢占式时,在允许多级嵌套的方式下,闪光灯管理服务为所述在先应用关闭闪光灯,同时对闪光灯关闭前的信息进行入栈操作即存入栈顶,并通知在先应用有新的打开闪光灯的申请到来,根据当前应用的申请打开闪光灯,将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,并通知当前应用闪光灯的打开结果,在当前应用释放对闪光灯的使用后,进行出栈操作,根据出栈的信息打开闪光灯,并通知在先应用闪光灯的打开结果。
允许单级嵌套的方式下,需通过临时抢占的嵌套标识来识别当前临时抢占的嵌套级别,可以将临时抢占的嵌套标识的初始值设置为零,被临时抢占一次则将临时抢占的嵌套标识增加一,如果临时抢占的嵌套标识等于一则表明闪光灯已被临时抢占一次,此时其它应用不能再进行临时抢占。在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式时,确定是否为当前应用打开闪光灯的方法如下:
在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且临时抢占的嵌套标识为零时,确定为所述当前应用打开闪光灯,并对所述临时抢占的嵌套标识进行加一操作;在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且所述临时抢占的嵌套标识等于一时,确定不为所述当前应用打开闪光灯。
本实施提供的闪光灯打开方法,当前应用可以在申请闪光灯使用权时选择合适的打开方式,可以选择允许单级或多级嵌套临时抢占的模式,在后应用打开闪光时,需要根据当前应用的打开方式来确定是否能打开闪光灯,以及打开闪灯的过程。相对于现有技术每个应用都采用统一的打开方式相比,合理地分配了闪光灯的使用权,使得多个应用可以共享闪光灯。
图4为本发明提供的一种闪光灯打开装置结构示意图。如图4所示,本实施例提供的装置包括:接收模块41、确定模块42、关闭模块43和打开模块44。
接收模块41,用于接收当前应用发起的打开闪光灯申请,所述申请包括所述当前应用申请打开闪光式的方式;
确定模块42,用于根据闪光灯的当前状态和闪光灯的当前模式,确定是否为所述当前应用打开闪光灯;所述闪光灯的当前模式为在先应用打开闪光灯的方式;所述闪光灯的状态包括打开和关闭;
进一步地,所述确定模块具体为:在闪光灯的当前状态为关闭或闪光灯的当前模式不是独占式时,确定为所述当前应用打开闪光灯;在闪光灯的当前状态为打开且闪光灯的当前模式为独占式时,确定不能为所述当前应用打开闪光灯。
关闭模块43,用于在所述闪光灯的当前状态为打开且确定为所述当前应用打开闪光灯时,为在先应用关闭闪光灯并通知在先应用;
打开模块44,用于在确定为当前应用打开闪光灯情况下,根据当前应用的申请打开闪光灯,并将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,通知所述当前应用闪光灯的打开结果。
本发明提供的闪光灯打开装置,应用在申请打开闪光灯时,在申请中包括应用申请打开闪光式的方式。闪光灯管理服务根据闪光灯的当前状态和在先应用打开闪光灯的方式,确定为应用打开闪光灯后,将闪光灯的当前模式更新为该应用申请打开闪光灯的方式,以便在该应用打开闪光灯时如果其它应用申请打开闪光灯时根据闪光灯的当前模式,确定是否为其它应用打开闪光灯。由于本发明在打开闪光灯时考虑到了应用申请打开闪光灯的方式,实现了合理分配闪光灯使用权的目的。
本发明在现有技术的基础上增加了一种新的闪光灯打开方式即允许临时抢占式。应用以临时抢占式打开闪光灯时,在闪光灯处于打开状态时闪光灯可以被其它应用抢占,其它应用使用完闪光灯后,闪光灯管理服务重新为在先应用打开闪光灯,即将闪光灯使用权分配给在先应用。如图5所示,本发明提供的装置还包括恢复模块45。
恢复模块45,用于若闪光灯的当前模式为允许临时抢占模式,在所述关闭模块为在先应用关闭闪光灯并通知在先应用之后,保存闪光灯关闭前的信息;在所述打开模块将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式之后,在当前应用释放对闪光灯的使用后,根据先前保存的闪光灯信息打开闪光灯,并通知在先应用闪光灯的打开结果。
对于允许临时抢占式,可以采取单级嵌套或者多级嵌套的方式。所谓单级嵌套,指的是只允许抢占一次,通过抢占其它应用的闪光灯使用权的应用,即使该应用申请打开闪光灯的方式为临时抢占模式,也不再允许其它应用打开闪光灯。多级嵌套,指的是允许闪光灯被多次抢占,只要应用申请闪光灯的方式为允许临时抢占式,那么不管该应用是否是通过抢占其它应用打开的闪光灯,闪光灯都可以被其它应用抢占。
闪光灯的当前模式为允许临时抢占式,在允许多级嵌套的方式下,如果闪光灯的当前状态为打开,关闭模块43为所述在先应用关闭闪光灯,同时对闪光灯关闭前的信息进行入栈操作即存入栈顶,并通知在先应用有新的打开闪光灯的申请到来,打开模块44根据当前应用的申请打开闪光灯,将闪光灯的当前模式更新为所述当前应用申请打开闪光灯的方式,并通知当前应用闪光灯的打开结果,恢复模块45在当前应用释放对闪光灯的使用后,进行出栈操作,根据出栈的信息打开闪光灯,并通知在先应用闪光灯的打开结果。
允许单级嵌套时,需通过临时抢占的嵌套标识来识别当前临时抢占的嵌套级别,可以将临时抢占的嵌套标识的初始值设置为零,被临时抢占一次则将临时抢占的嵌套标识增加一,如果临时抢占的嵌套标识等于一则表明闪光灯已被临时抢占一次,此时其它应用不能再进行临时抢占。因此,所述确定模块42,还用于:在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且临时抢占的嵌套标识为零时,确定为所述当前应用打开闪光灯,并对所述临时抢占的嵌套标识进行加一操作;所述临时抢占的嵌套标识的初始值为零;在闪光灯的当前状态为打开、闪光灯的当前模式是允许临时抢占式且所述临时抢占的嵌套标识等于一时,确定不为所述当前应用打开闪光灯。
本实施提供的闪光灯打开装置,当前应用可以在申请闪光灯使用权时选择合适的打开方式,可以选择允许单级或多级嵌套临时抢占的模式,在后应用打开闪光时,需要根据当前应用的打开方式来确定是否能打开闪光灯,以及打开闪灯的过程。相对于现有技术每个应用都采用统一的打开方式相比,合理地分配了闪光灯的使用权,使得多个应用可以共享闪光灯。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。