U.S. patent application number 15/726724 was filed with the patent office on 2018-02-15 for coalescing geo-fence events.
This patent application is currently assigned to Microsoft Technology Licensing, LLC. The applicant listed for this patent is Microsoft Technology Licensing, LLC. Invention is credited to Daniel Estrada Alva, Fernando Gonzalez, Frank Gorgenyi, Sanjib Saha.
Application Number | 20180049132 15/726724 |
Document ID | / |
Family ID | 49301640 |
Filed Date | 2018-02-15 |
United States Patent
Application |
20180049132 |
Kind Code |
A1 |
Gorgenyi; Frank ; et
al. |
February 15, 2018 |
Coalescing Geo-Fence Events
Abstract
A device location is determined, and the location of an area of
interest that is a geographic area referred to as a geo-fence is
identified. Multiple geo-fences can be identified by the device,
and different geo-fences can be associated with different programs
on the device. An operating system of the device implements
multiple different periods of operation for the device, including a
conservation period during which certain programs are not typically
scheduled to run, and an execution period during which such
programs are typically scheduled to run. A system identifies
geo-fence events, which occur when the device enters or exits the
geo-fence. The system maintains a record of the geo-fence events
for each of multiple geo-fences, and provides to a program selected
ones of those geo-fence events at a time when the program is
scheduled to run on the device during an execution period of the
operating system.
Inventors: |
Gorgenyi; Frank; (Bremerton,
WA) ; Estrada Alva; Daniel; (Kirkland, WA) ;
Gonzalez; Fernando; (Bellevue, WA) ; Saha;
Sanjib; (Sammamish, WA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
Microsoft Technology Licensing, LLC |
Redmond |
WA |
US |
|
|
Assignee: |
Microsoft Technology Licensing,
LLC
Redmond
WA
|
Family ID: |
49301640 |
Appl. No.: |
15/726724 |
Filed: |
October 6, 2017 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
13918818 |
Jun 14, 2013 |
9820231 |
|
|
15726724 |
|
|
|
|
Current U.S.
Class: |
1/1 |
Current CPC
Class: |
Y02D 70/164 20180101;
H04W 52/0251 20130101; Y02D 30/70 20200801; H04W 4/021 20130101;
Y02D 70/26 20180101; Y02D 70/142 20180101; H04W 4/022 20130101 |
International
Class: |
H04W 52/02 20060101
H04W052/02; H04W 4/02 20060101 H04W004/02 |
Claims
1. (canceled)
2. A method comprising: detecting when one or more geo-fence events
occur for a computing device during a conservation period of an
operating system during which certain programs are not scheduled to
run; collecting geo-fence events for each of multiple geo-fences
together for each of the certain programs; and maintaining a record
of the collected geo-fence events for each of the multiple
geo-fences while waiting until a program associated with at least
one of the multiple geo-fences is scheduled to run during an
execution period of the operating system.
3. The method as recited in claim 2, wherein the conservation
period is when the computing device is operating in a power saving
mode.
4. The method as recited in claim 2, wherein the conservation
period and the execution period are scheduled for the program based
on one or more of: when the program was last scheduled to run,
another program that is scheduled to run, available power of the
computing device, and whether a geo-fence has been detected for the
program.
5. The method as recited in claim 2, further comprising selecting
one or more of the collected geo-fence events to provide to the
program during the execution period.
6. The method as recited in claim 5, wherein the one or more
geo-fence events include a most recent entering event and a most
recent exiting event for each geo-fence associated with the
program.
7. The method as recited in claim 2, wherein maintaining the record
of the geo-fence events comprises replacing a previously recorded
geo-fence event of a type with a newly detected geo-fence event of
the type.
8. The method as recited in claim 2, further comprising providing,
to the program, the collected geo-fence events for the program when
the program is scheduled to run during the execution period of the
operating system.
9. The method as recited in claim 2, further comprising providing,
to the program, the collected geo-fence events for the program when
the program is activated by a user.
10. The method as recited in claim 2, wherein the detecting
comprises determining whether criteria related to a state of the
computing device has been satisfied.
11. A computing device comprising: one or more processors; a data
store to store geo-fence data for multiple geo-fences, the
geo-fence data for a geo-fence including an indication of a program
associated with the geo-fence; and one or more computer-readable
storage devices comprising computer-readable instructions which,
when executed by the one or more processors, implement: a geo-fence
event detection module to detect when one or more geo-fence events
occur during a conservation period of an operating system during
which certain programs are not scheduled to run; and a geo-fence
event storage module to: collect geo-fence events for each of
multiple geo-fences together for each of the certain programs, and
maintain a record of the geo-fence events for each of the multiple
geo-fences while waiting until a program associated with at least
one of the multiple geo-fences is scheduled to run during an
execution period.
12. The computing device as recited in claim 11, wherein the one or
more computer-readable storage devices further implements a
scheduling mechanism that schedules conservation periods and
execution periods for the certain programs.
13. The computing device as recited in claim 11, wherein the one or
more computer-readable storage devices further implements a
geo-fence event reporting module that provides, to the program, the
record of the geo-fence events associated with the program during
the execution period.
14. The computing device as recited in claim 11, wherein the one or
more computer-readable storage devices further implements a
geo-fence event reporting module that selects one or more of the
geo-fence events for each geo-fence associated with the
program.
15. The computing device as recited in claim 14, wherein the one or
more selected geo-fences are a most recent enter event and a most
recent exit event for each geo-fence.
16. The computing device as recited in claim 14, wherein the one or
more selected geo-fences are selected based on a criteria for the
geo-fence being satisfied.
17. A method comprising: detecting when one or more geo-fence
events occur for a computing device during a conservation period of
an operating system during which certain programs are not scheduled
to run; maintaining a record of geo-fence events for each of
multiple geo-fences; collecting the geo-fence events for each of
the multiple geo-fences together for each of the certain programs;
waiting until a program associated with at least one of the
multiple geo-fences is scheduled to run during an execution period
of the operating system; and providing, to the program, the
collected geo-fence events for the program when the program is
scheduled to run during the execution period of the operating
system.
18. The method as recited in claim 17, wherein the conservation
period and the execution period are scheduled for the program based
on one or more of: when the program was last scheduled to run,
another program that is scheduled to run, available power of the
computing device, and whether a geo-fence has been detected for the
program.
19. The method as recited in claim 17, wherein the detecting
comprises determining that criteria related to a state of the
computing device has been satisfied.
20. The method as recited in claim 17, wherein the collected
geo-fences are selected based on a criteria for the collected
geo-fences being satisfied.
21. The method as recited in claim 17, wherein the providing the
collected geo-fence events comprises providing only a most recent
enter event and exit event.
Description
RELATED APPLICATIONS
[0001] This application is a continuation of and claims priority to
U.S. patent application Ser. No. 13/918,818 entitled "Coalescing
Geo-Fence Events" and filed Jun. 14, 2013, the disclosure of which
is hereby incorporated by reference herein in its entirety.
BACKGROUND
[0002] As computing technology has advanced, increasingly powerful
mobile devices have become available. For example, smart phones
have become commonplace. The mobility of such devices has resulted
in different types of functionality being developed, such as
location-based functionality in which certain actions are taken by
the device based on the location of the device. While this
functionality has many benefits, it is not without its problems.
One such problem is that a program may attempt to be notified of
the location of the device more frequently than programs are
expected to be notified. This can result in device controls
regarding the frequency with which programs are expected to be run
being circumvented, which leads to increased power usage and
reduced battery life in the device and thus a poor user experience
when using the device.
SUMMARY
[0003] This Summary is provided to introduce a selection of
concepts in a simplified form that are further described below in
the Detailed Description. This Summary is not intended to identify
key features or essential features of the claimed subject matter,
nor is it intended to be used to limit the scope of the claimed
subject matter.
[0004] In accordance with one or more aspects, the occurrence of
one or more geo-fence events for a computing device during a
conservation period of an operating system during which certain
programs are not scheduled to run is detected. A record of
geo-fence events for each of multiple geo-fences is maintained.
When a program associated with at least one of the multiple
geo-fences is scheduled to run during an execution period of the
operating system, an indication of one or more geo-fence events for
the at least one of the multiple geo-fences from the record of
geo-fence events is provided to the program.
BRIEF DESCRIPTION OF THE DRAWINGS
[0005] The same numbers are used throughout the drawings to
reference like features.
[0006] FIG. 1 illustrates an example system in which the coalescing
geo-fence events discussed herein can be used.
[0007] FIG. 2 is a block diagram illustrating an example system
implementing the coalescing geo-fence events in accordance with one
or more embodiments.
[0008] FIG. 3 illustrates an example user interface that can be
displayed to a user to allow the user to select whether locations
are to be determined in accordance with one or more
embodiments.
[0009] FIG. 4 illustrates an example of different periods of
operation in accordance with one or more embodiments.
[0010] FIG. 5 is a flowchart illustrating an example process for
coalescing geo-fence events in accordance with one or more
embodiments.
[0011] FIG. 6 illustrates an example system that includes an
example computing device that is representative of one or more
systems and/or devices that may implement the various techniques
described herein.
DETAILED DESCRIPTION
[0012] Coalescing geo-fence events is discussed herein. The
location of a computing device is determined, and the location of
an area of interest is identified. The area of interest is a
geographic area that is also referred to as a geo-fence. Multiple
geo-fences can be identified by the computing device, and different
geo-fences can be associated with different programs on the
computing device. An operating system of the computing device
implements multiple different periods of operation for the
computing device, including a conservation period during which
certain programs are not typically scheduled to run, and an
execution period during which such programs are typically scheduled
to run. A system of the computing device identifies geo-fence
events, which occur when the computing device enters or exits the
geo-fence. The system maintains a record of the geo-fence events
for each of multiple geo-fences, and provides to a program selected
ones of those geo-fence events (e.g., the geo-fence events for the
most recent entering and exiting of each geo-fence associated with
the program) at a time when the program is scheduled to run on the
computing device during an execution period of the operating
system.
[0013] FIG. 1 illustrates an example system 100 in which the
coalescing geo-fence events discussed herein can be used. The
system 100 includes a computing device 102, which can be any of a
variety of types of devices, although typically is a mobile device.
For example, the computing device 102 can be a smart phone or other
wireless phone, a laptop or netbook computer, a tablet or notepad
computer, a wearable computer, a mobile station, an entertainment
appliance, an audio and/or video playback device, a game console,
an automotive computer, and so forth. The computing device 102 is
typically referred to as being a mobile device because the device
102 is designed or intended to be moved to multiple different
locations (e.g., taken by a user with him or her as the user goes
to different locations).
[0014] The location of the computing device 102 can be determined
using any of a variety of different techniques, such as wireless
networking (e.g., Wi-Fi) triangulation, cellular positioning,
Global Navigation Satellite System (GNSS) positioning, network
address (e.g., Internet Protocol (IP) address) positioning, and so
forth as discussed in more detail below. Different location
determination techniques can have different accuracy errors or
associated uncertainties. For example, a location determination
technique may be accurate to 10 meters (m) or 10 kilometers (km).
The exact position of the computing device 102 is thus not
pinpointed, but is illustrated as an area 104 surrounding the
computing device 102. The area 104 represents the uncertainty in
the determined location or position of the computing device 102, so
although the computing device is determined to be at a particular
location or position (e.g., approximately the center of the area
104), the computing device 102 may actually be anywhere within the
area 104.
[0015] The system 100 also illustrates multiple geo-fences 112,
114, 116, and 118. Each geo-fence 112-118 can be any of a variety
of different places of interest to the computing device 102, to the
user of the computing device 102, to a program running on the
computing device 102, and so forth. For example, a geo-fence
112-118 can be the user's home, the user's workplace, restaurants
or businesses that may be visited by the user, educational
facilities, public services (e.g., hospitals or libraries),
geographic places (e.g., cities or states), and so forth.
[0016] The location of geo-fences 112-118 is maintained in or
otherwise accessible to the computing device 102. It should be
noted that different users of the computing device 102 can
optionally have different geo-fences maintained or accessed.
[0017] The computing device 102 is mobile and can enter and exit
geo-fences 112-118. At any given time, the computing device 102 can
be within one of geo-fences 112-118, or within no geo-fence. If the
computing device 102 is determined to be within the area that
encompasses a particular geo-fence, then the computing device 102
is referred to as being inside or within that particular geo-fence.
However, if the computing device 102 is determined to not be within
the area that encompasses a particular geo-fence, then the
computing device 102 is referred to as being outside or not within
that particular geo-fence. Situations can also arise in which two
or more geo-fences overlap, in which case the computing device 102
can be within two or more geo-fences 112-118 at one time. It should
be noted that the illustration of FIG. 1 is not to scale, and that
geo-fences 112-118 can be, and typically are, significantly larger
in size than the computing device 102.
[0018] In the illustrated example, the area 104 does not intersect
any of the geo-fences 112-118, and thus the computing device 102 is
outside each of the geo-fences 112-118. However, if the area 104
were to at least partially overlap one of the geo-fences 112-118,
then the computing device 102 is possibly inside the geo-fence that
is overlapped. Whether the computing device 102 is determined to be
inside the geo-fence or outside the geo-fence in such situations
can be determined in various manners, such as based on the presence
of an overlap, how much of the geo-fences overlap, and so
forth.
[0019] FIG. 2 is a block diagram illustrating an example system 200
implementing the coalescing geo-fence events in accordance with one
or more embodiments. The system 200 can be implemented by a single
device such as the computing device 102 of FIG. 1, or alternatively
multiple devices such as the computing device 102 and one or more
server computers accessed via a network (e.g., a cellular or other
wireless phone network, the Internet, etc.). The system 200
includes one or more location determination modules 202, a
geo-fence determination module 204, a geo-fence event detection
module 206, a geo-fence triggering module 208, and a data store
210.
[0020] The data store 210 maintains various data used by the
techniques discussed herein. The data store 210 can be implemented
using any of a variety of different storage devices, such as system
memory (e.g., random access memory (RAM)), Flash memory or other
solid state memory, magnetic disks, optical discs, and so forth.
The data maintained in the data store 210 identifies multiple
geo-fences, including geo-fence data 220 for each of multiple
geo-fences. Geo-fence data 220 can be obtained from various
sources, such as from a distributer or reseller of the data store
210 that stores the data on the data store 210, from a program
running on a computing device implementing the system 200, from
another device or service, and so forth. The geo-fence data for a
geo-fence describes the boundary of the geo-fence, as well as the
criteria to be satisfied in order for the geo-fence to be
triggered.
[0021] The criteria to be satisfied can refer to a device entering
the geo-fence, exiting the geo-fence, staying within the geo-fence
for a particular amount of time (e.g., at least a threshold amount
of time, no more than a threshold amount of time, etc.), a time
period for the geo-fence (e.g., a start time and end time, a start
time and a duration), combinations thereof, and so forth. Various
additional criteria can optionally be included as well, such as
system state to be satisfied. For example, the criteria can include
whether the display of the computing device is turned on or off,
whether the computing device has network connectivity (e.g.,
Internet connectivity), a power state of the computing device
(e.g., whether the computing device has at least a threshold amount
of battery life remaining), and so forth.
[0022] One or more actions that are taken in response to the
geo-fence being triggered (the criteria being satisfied) can also
be included as part of the geo-fence data. Any of a variety of
actions can be taken when a geo-fence is triggered, such as a
particular program being notified, particular content being
displayed or otherwise played back by the computing device, the
geo-fence data being deleted from the data store 210, combinations
thereof, and so forth. Multiple different actions can be taken
based on the manner in which the geo-fence is triggered, such as
one action taken in response to the device entering the geo-fence,
and another action taken in response to the device exiting the
geo-fence.
[0023] The boundary of the geo-fence can be specified in any of a
variety of different manners. For example, the geo-fence can be
specified as a position (e.g., latitude and longitude coordinates)
and a radius, as a set of positions (e.g., latitude and longitude
coordinates of corners of the geo-fence), as a series of vectors,
and so forth. In the discussions herein, reference is made to the
geo-fences being approximately circular in shape. However, it
should be noted that the geo-fences can be any of a variety of
regular geometric shapes (e.g., triangles, rectangles, octagons,
and so forth), other geometric shapes (e.g., freeform shapes or
blobs), and so forth.
[0024] The data store 210 is illustrated in FIG. 2 as being part of
the system 200. It should be noted that the data maintained in the
data store 210 can be obtained from the programs 230 (e.g., from
the programs 230 as they are loaded in a computing device
implementing the system 200). Alternatively, one or more of the
programs 230 can include a data store that is used in addition to,
or in place of, the data store 210.
[0025] The geo-fences can be used in a variety of different
manners. For example, a geo-fence and action to be taken can be to
alert a user of a computing device implementing at least part of
the system 200 when they are approaching a bus stop, to give the
user a coupon when they enter a shopping mall or store, to notify a
parent when their child has left school or entered their home, to
display weather information for a current location when the user
travels to a different city, and so forth.
[0026] The data maintained in the data store 210 can also include
additional data used with the techniques discussed herein. For
example, the data store 210 can include a record of geo-fence
events 222, which are geo-fence events detected by the geo-fence
event detection module 206 as discussed in more detail below.
[0027] The location determination modules 202 include one or more
modules that determine the location of the computing device 102. In
the illustrated example, the location determination modules 202
include a Wi-Fi module 212, a GNSS module 214, a network address
module 216, and a cellular module 218. It should be noted, however,
that these modules 212-218 are examples and that the location
determination modules 202 need not include each of the modules
212-218 and/or that the location determination modules 202 can
include one or more additional modules that determine a location of
the computing device 102 in different manners. For example, the
location determination modules can include MEMS
(Microelectromechanical systems), cameras, microphones, and so
forth.
[0028] The Wi-Fi module 212 uses Wi-Fi signals, such as
triangulation of Wi-Fi signals, to determine the location of the
computing device 102. The Wi-Fi module 212 can receive signals from
various wireless access points, including an identifier of a
particular wireless access point and/or a particular wireless
network from which a signal is received. For example, a wireless
access point may send a media access control (MAC) address of the
wireless access point, a basic service set identifier (BSSID) of a
wireless network supported by the wireless access point, and so
forth. The Wi-Fi module 212 can also measure a strength (e.g.,
received signal strength indicator (RSSI) values) of these received
signals. It should be noted that the Wi-Fi module 212 can, at any
given time for any given position of the computing device, receive
signals from multiple wireless access points. The Wi-Fi module 212
can maintain or otherwise access a record of wireless access
points, signal strengths, and corresponding locations to determine
the location of the computing device at any particular time given
the wireless access points from which signals are received and the
strength of those signals at the particular given time.
Alternatively, the Wi-Fi module 212 can provide an indication of
the wireless access points from which signals are received and the
strength of those signals at a particular given time to a remote
service (e.g., accessed via any of a variety of different types of
networks) that determines and returns to the Wi-Fi module 212 an
indication of the location of the computing device at that
particular given time.
[0029] The GNSS module 214 uses GNSS positioning to determine the
location of the computing device 102, determining a location of the
computing device based on a particular number of satellites (e.g.,
four or more satellites) from which the GNSS module 214 can receive
signals or otherwise communicate. The GNSS module 214 can implement
the GNSS functionality using a variety of different technologies,
including but not limited to the Global Positioning System (GPS),
the Global Navigation Satellite System (GLONASS), the BeiDou (or
Compass) navigation system, the Galileo positioning system,
combinations thereof, and so forth. The GNSS module 214 operates in
any of a variety of public and/or proprietary manners to determine,
given the one or more satellites from which the GNSS module 214 can
receive signals or otherwise communicate at any particular given
time, the location of the computing device at that particular given
time.
[0030] The network address module 216 uses network address
positioning to determine the location of the computing device 102.
The network address used can be any of a variety of network
addresses, such as the IP address of the computing device. The
network address module 216 can maintain or otherwise access a
record of IP addresses or address ranges and corresponding
locations to determine the location of the computing device at any
particular time given the IP address assigned to the computing
device at the particular given time. Alternatively, the network
address module 216 can provide an indication of the IP address of
the computing device at a particular given time to a remote service
(e.g., accessed via any of a variety of different types of
networks) that determines and returns to the network address module
216 an indication of the location of the computing device at that
particular given time.
[0031] The cellular module 218 uses cellular positioning to
determine the location of the computing device 102. The cellular
module 218 can receive signals from various cell transceivers,
including an identifier of a particular cell transceiver (e.g., a
cell tower or transceiver identifier) from which a signal is
received. The cellular module 218 can also measure a strength of
these received signals. It should be noted that the cellular module
218 can, at any given time for any given position of the computing
device, receive signals from multiple cell transceivers. The
cellular module 218 can maintain or otherwise access a record of
cell transceivers, signal strengths, and corresponding locations to
determine the location of the computing device at any particular
time given the cell transceivers from which signals are received
and the strength of those signals at the particular given time.
Alternatively, the cellular module 218 can provide an indication of
the transceivers from which signals are received and the strength
of those signals at a particular given time to a remote service
(e.g., accessed via any of a variety of different types of
networks) that determines and returns to the cellular module 218 an
indication of the location of the computing device at that
particular given time. Additionally or alternatively, the cellular
module 218 can monitor state changes at low power and provide
notifications (e.g., to the geo-fence event detection module 206),
allowing movement detections at low power without requiring
continuous polling.
[0032] The locations determined by the location determination
modules 202 are typically latitude and longitude coordinates,
although the location can alternatively be specified in other
manners. Each of the location determination modules 202 has an
associated uncertainty in the location that it determines, also
referred to as an accuracy error or estimated accuracy error of the
location. The amount of this uncertainty can be determined in
various manners, such as being reported by the location
determination module itself, being pre-configured in or otherwise
accessible to other modules of the system 200 (e.g., the geo-fence
event detection module 206), and so forth. The uncertainty results
in a position uncertainty area for the location determined by a
location determination module, the position uncertainty area being
an area within which the computing device 102 may actually be for
the determined location. In one or more embodiments, the position
uncertainty area is an approximately circular area with the
location determined by the location determination module being
approximately the center of the circular area, and the radius of
the approximately circular area being an error radius determined as
the uncertainty for the location determination module.
Alternatively, the position uncertainty area can be described using
various other regular or other geometric shapes. Thus, a position
uncertainty area for a location determination module can be a
spatial error distribution function. An approximation of the
spatial error distribution function can be a flat distribution over
an area, although various other approximations or descriptions of
the spatial error distribution function can alternatively be
used.
[0033] In one more embodiments, a location is determined by the
location determination modules 202 only after receiving user
consent to do so. This user consent can be an opt-in consent, where
the user takes an affirmative action to request that the location
be determined by the location determination modules 202 before any
such location is determined. Alternatively, this user consent can
be an opt-out consent, where the user takes an affirmative action
to request that the location not be determined by the location
determination modules 202. If the user does not choose to opt out
of determining the location, then it is an implied consent by the
user to determine his or her location. Furthermore, it should be
noted that the location determined by the location determination
modules 202 can be maintained in a computing device receiving the
determined location (e.g., the computing device 102 of FIG. 1) and
need not be communicated to other devices or services.
[0034] Alternatively, user consent may be granted for specific
programs and revoked for other programs. In this case, location
information will be determined only when the user has consented for
at least one program for which geo-fence tracking is used. The
location information is used to determine the entry and/or exit of
only those geo-fences belonging to the consented programs.
Remaining geo-fences from the unapproved programs are not
tracked.
[0035] FIG. 3 illustrates an example user interface that can be
displayed to a user to allow the user to select whether locations
are to be determined in accordance with one or more embodiments. A
location control window 300 is displayed including a description
302 explaining to the user why the location information is being
determined. A link 304 to a privacy statement is also displayed. If
the user selects the link 304, a privacy statement of the system
200 is displayed, explaining to the user how the user's information
is kept confidential.
[0036] Additionally, the user is able to select a radio button 306
to opt-in to the determining of location information, or a radio
button 308 to opt-out of the determining of location information.
Once a radio button 306 or 308 is selected, the user can select an
"OK" button 310 to have the selection saved. It is to be
appreciated that radio buttons and an "OK" button are only examples
of user interfaces that can be presented to a user to opt-in or
opt-out of the determining of location information, and that a
variety of other conventional user interface techniques can
alternatively be used. The system 200 of FIG. 2 then proceeds to
determine the location of the computing device, or not determine
the location of the computing device, in accordance with the user's
selection.
[0037] Returning to FIG. 2, the geo-fence determination module 204
determines one or more of the geo-fences identified in the data
store 210 for which a determination is to be made as to whether the
geo-fence is triggered. Data for numerous different geo-fences can
be maintained in the data store 210, and one or more of those
geo-fences is selected by the geo-fence determination module 204.
The geo-fence determination module 204 can make this determination
in a variety of different manners, such as based on a current
distance between the geo-fences and the computing device, based on
sizes of (areas encompassed by) the geo-fences, based on which
geo-fence is most (or nearly most) stringent as discussed in more
detail below, and so forth. The one or more geo-fences that are
determined by the module 204 are those deemed more likely to be
entered or exited based on various criteria, such as the current
location of the computing device, and those one or more geo-fences
can be the focus of the module 204 until the criteria changes.
However, it should be noted that the geo-fence determination module
204 can determine whether a geo-fence is triggered for any of the
geo-fences in the data store 210.
[0038] The geo-fence event detection module 206 obtains a current
location of the computing device at regular or irregular intervals,
and detects whether a geo-fence event occurs. These intervals can
be selected dynamically based on current conditions (e.g.,
approximate distance to a closest geo-fence, power budget for the
computing device, an estimated speed of movement of the computing
device, and so forth). A geo-fence event refers to the device
entering the geo-fence, exiting the geo-fence, or staying in the
geo-fence for a particular amount of time (e.g., being in the
geo-fence and not exiting the geo-fence). The geo-fence event
detection module 206 can evaluate the uncertainty associated with
the determined location relative to the size of the geo-fence in
order to determine whether the computing device is inside the
geo-fence or outside the geo-fence. Alternatively, the geo-fence
event detection module 206 can use the location determined by a
location determination module to determine whether the computing
device is inside the geo-fence or outside the geo-fence without
regard for the uncertainty associated with the determined location.
The geo-fence event detection module 206 can also track whether the
computing device is inside or outside the geo-fence over time, and
thus knows whether the computing device has moved from inside the
geo-fence to outside the geo-fence, whether the computing device
has moved outside the geo-fence to inside the geo-fence, an amount
of time that the computing device has been inside the geo-fence,
and so forth.
[0039] The geo-fence detection module 206 includes a geo-fence
event storage module 224, and in response to a geo-fence event
being detected by the module 206, the geo-fence event storage
module 224 stores the detected geo-fence event in the geo-fence
event record 222. The geo-fence event record 222 can be implemented
in a variety of different manners, such as a database, a list of
geo-fence events per geo-fence, and so forth. Storing the detected
geo-fence event refers to storing data identifying the geo-fence
event and optionally various aspects of the geo-fence event. The
data stored for the detected geo-fence event can include an
indication of whether the geo-fence event is entering a geo-fence
or exiting a geo-fence, an indication of (e.g., identifier of) the
geo-fence entered or exited, a duration that the computing device
was in (or has been in) a geo-fence, a program associated with the
geo-fence (e.g., a program to be notified of the geo-fence event),
a timestamp (e.g., date and/or time) of when the geo-fence event
was detected, and so forth. The stored data can also identify the
geo-fence for which the geo-fence event is detected, or the
geo-fence events can be stored in a manner in which the
identification of the geo-fence for which the geo-fence event is
detected is inherent (e.g., the geo-fence events can be added to a
list for the geo-fence, each geo-fence having a different list).
The duration that the computing device was in or has been in a
geo-fence can be determined in different manners, such as by the
geo-fence event detection module 206 monitoring how long it has
been since a geo-fence was entered, by determining the time that
has elapsed since the last geo-fence event entering the geo-fence
was detected (or the time that elapsed between the most recent
geo-fence event exiting the geo-fence was detected and the
preceding geo-fence event entering the geo-fence was detected), and
so forth.
[0040] In one or more embodiments, each geo-fence event detected by
the geo-fence event detection module 206 is stored in the data
store 210, for example in an ordered list sorted by the time of
occurrence of the geo-fence event. The geo-fence event record 222
can include geo-fence events for different durations, such as the
past 24 hours, the past week, and so forth. Alternatively, the
geo-fence event record 222 can include, for each geo-fence event,
the most recent geo-fence event exiting the geo-fence and the most
recent geo-fence event entering the geo-fence. Each time a new
geo-fence event is detected for a geo-fence, the previously
recorded geo-fence event of the same type (exiting or entering the
geo-fence) can be replaced by the newly detected geo-fence event.
Thus, in some embodiments only the most recent geo-fence event
exiting the geo-fence and the most recent geo-fence event entering
the geo-fence for a geo-fence are recorded, while in other
embodiments multiple geo-fence entering and exiting events are
recorded for a geo-fence (e.g., all geo-fence entering and exiting
events are recorded). The recorded geo-fence events for a geo-fence
may also be removed from the data store 210 in response to various
events, such as the application that provided the geo-fence data
for the geo-fence being uninstalled or otherwise removed from the
system 200).
[0041] The geo-fence triggering module 208 analyzes the criteria
associated with a geo-fence and determines whether the criteria are
satisfied. This determination is made based at least in part on the
occurrence of one or more geo-fence events as determined by the
geo-fence event detection module 206. In response to the criteria
being satisfied, the module 208 determines that the geo-fence is
triggered and takes the appropriate action. The action taken can be
associated with geo-fence data for the triggered geo-fence stored
in the data store 210, or can be determined in other manners such
as being pre-configured in the geo-fence triggering module 208,
being obtained from another module or device, and so forth.
[0042] In one or more embodiments, the action taken by the
geo-fence triggering module 208 in response to the geo-fence being
triggered is to notify one or more programs 230 that the geo-fence
was triggered. The one or more programs 230 can include various
different types of programs, such as applications, operating system
modules or components, and so forth. The one or more programs 230
to be notified (also referred to as the programs 230 associated
with the triggered geo-fence) can be identified in different
manners, such as being configured in the geo-fence triggering
module 208, being identified as part of the geo-fence data for the
geo-fence in the data store 210, being obtained from another module
or service, and so forth. A program 230 can be notified of the
geo-fence event that occurred, as well as optionally additional
information (e.g., that the computing device was within a geo-fence
for at least a threshold amount of time). The program 230 can then
take the action it desires based on the geo-fence being
triggered.
[0043] The geo-fence triggering module 208 includes a geo-fence
event reporting module 226 that manages notifying programs that a
geo-fence was triggered. The geo-fence event reporting module 226
selects one or more geo-fence events from geo-fence event record
222, such as for each geo-fence associated with a program 230 the
most recent geo-fence exit event (the most recent geo-fence event
that is exiting the geo-fence) and the most recent geo-fence enter
event (the most recent geo-fence event that is entering the
geo-fence). The geo-fence event reporting module 226 coalesces
geo-fence events for each geo-fence associated with a program 230,
and provides to the program 230 a collection of geo-fence events
for geo-fences associated with the program 230.
[0044] In one or more embodiments, a geo-fence is triggered in
response to a geo-fence event (entering or exiting the geo-fence),
and the geo-fence event reporting module 226 notifies the program
of that geo-fence event. Alternatively, the geo-fence event
reporting module 226 can take into account other criteria
associated with the geo-fence in determining whether to notify the
program of the geo-fence event, and notify the program only if such
additional criteria are satisfied. For example, if the criteria
indicates that Internet connectivity is desired but no Internet
access is currently available, then the geo-fence reporting module
226 would not notify the program of the geo-fence event. This other
criteria can be stored as part of the geo-fence event record 222
and/or geo-fence data 220.
[0045] Furthermore, the geo-fence event reporting module 226 can
take into account any criteria associated with the program itself.
For example, if the criteria indicates that the program to be
notified is not to run during certain times of the day, then the
geo-fence reporting module 226 would not notify the program of the
geo-fence event if it happens during those certain times of the
day.
[0046] Additionally, situations can arise where the geo-fence event
reporting module 226 does not notify the program 230 about certain
geo-fence events, such as automatic expiration of a geo-fence. For
example, if a geo-fence is valid only for a specific time period
(e.g., a daily deal for a store that closes at 9 pm), then the
geo-fence can be automatically removed from the system 200 once it
expires, and the program 230 associated with the geo-fence may not
be notified of this removal event.
[0047] In one or more embodiments, the program 230 that is
associated with a geo-fence is a program on the computing device
implementing the system 200. An operating system of the computing
device implementing the system 200 implements multiple different
periods of operation for the computing device. These multiple
different periods of operation include a conservation period in
which the computing device is operating in a power saving mode.
During the conservation period, certain programs (such as
applications other than operating system programs) are not
typically scheduled to run and various other power saving
techniques can be employed by the operating system to reduce power
usage of the computing device. The multiple different periods of
operation also include an execution period in which the computing
device is operating in an execution mode. During the execution
period, programs that are not typically scheduled during the
conservation period are scheduled to run by a scheduling mechanism
of the operating system. The scheduling mechanism can take into
account various different factors to determine which program is to
run and how long the program is to run, such as how recently the
program was last scheduled to run, how long the program ran the
last time the program was scheduled to run (or over some past time
duration), other programs to be scheduled, available power (e.g.,
remaining battery life) of the computing device, whether a user
request to run the program is received, and so forth. It should be
noted that the scheduling mechanism operates independently of the
system 200--the scheduling mechanism can take into account whether
geo-fence events have been detected for a program in determining
when to schedule the program, but the scheduling mechanism need not
(and typically does not) schedule a program to run simply in
response to a geo-fence event associated with the program being
detected.
[0048] FIG. 4 illustrates an example of different periods of
operation in accordance with one or more embodiments. A timeline
402 is illustrated including interspersed execution periods 404 and
conservation periods 406. During execution periods 404 the
operating system is operating in the execution mode, and during
conservation periods 406 the operating system is operating in the
power saving mode. Although illustrated as having the same time
duration, it should be noted that different execution periods 404
can have different durations and that different conservation
periods 406 can have different durations. These durations of the
execution periods 404 and/or conservation periods 406 can vary over
time during operation of the computing device.
[0049] Returning to FIG. 2, the geo-fence event reporting module
226 coalesces geo-fence events for each geo-fence associated with a
program 230, and provides to the program 230 a collection of
geo-fence events for geo-fences associated with the program 230
when the program 230 is later scheduled to run. The collection of
geo-fence events (e.g., sorted chronologically starting with most
recent event) can be provided to the program 230 the next time that
the program 230 is scheduled to run, or alternatively a subsequent
time. The times when the program 230 is scheduled to run can be
controlled by the scheduling mechanism of the operating system, and
may be in the next execution period or some later execution period.
It should be noted that during both execution and conservation
periods, the geo-fence event detection module 206 operates to
detect geo-fence events and the geo-fence event storage module 224
stores the detected geo-fence events in the geo-fence event record
222. Thus, even though a program 230 that is to be notified of the
detected geo-fence events is not running or is not scheduled to run
(or the operating system is in the conservation period), geo-fence
events for geo-fences associated with the program are still being
detected and recorded, and can be provided to the program 230 when
the program 230 is later run. Once the geo-fence events are
received by the program 230, they can be subsequently removed from
the data store 210.
[0050] Although illustrated as modules separate from the location
determination modules 202, it should be noted that one or more of
the modules 204-208 can alternatively be implemented at least in
part in one of the location determination modules 202. For example,
at least part of one or more of the modules 204-208 can be
implemented in hardware components of the GNSS module 214 or the
Wi-Fi module 212.
[0051] FIG. 5 is a flowchart illustrating an example process 500
for coalescing geo-fence events in accordance with one or more
embodiments. The process 500 is carried out by a system, such as
the system 200 of FIG. 2, and can be implemented in software,
firmware, hardware, or combinations thereof. The process 500 is
shown as a set of acts and is not limited to the order shown for
performing the operations of the various acts. The process 500 is
an example process for coalescing geo-fence events; additional
discussions of coalescing geo-fence events are included herein with
reference to different figures.
[0052] In process 500, geo-fence event occurrences for a computing
device are detected (act 502). The occurrence of a geo-fence event
is based on the location of the computing device as determined by
one or more of the location determination modules 202 of FIG. 2,
and the locations of the various geo-fences is identified in the
geo-fence data in the data store 210.
[0053] A record of the detected geo-fence events is maintained (act
504). The record of detected geo-fence events that is maintained
can include various information identifying the geo-fence event and
optionally various aspects of the geo-fence event as discussed
above.
[0054] An indication of one or more geo-fence events detected for
at least one geo-fence associated with a program are provided to
the program when the program is run (act 506), and the program can
then perform various operations based on the indicated geo-fences
as the program desires. The indication of the one or more geo-fence
events can take various forms, such as the information identifying
the geo-fence event and various aspects of the geo-fence event that
is maintained in the data store 210 of FIG. 2, an identifier of a
location in the data store 210 where the information identifying
the geo-fence event is stored, and so forth. The indication can be
provided to the program using various mechanisms, such as the
program requesting geo-fence events from the system 200 of FIG. 2,
the system 200 automatically notifying the program of the geo-fence
events (e.g., by invoking an application programming interface of
the program or other callback function), and so forth.
[0055] The time when the program is run in act 506 is determined by
a scheduling mechanism of the operating system as discussed above.
It should be noted that the program can be waiting to be scheduled
or not running at all when the geo-fence events are detected. The
detected geo-fence events are provided to the program in act 506
(e.g., immediately) if the program is already running, or are
provided to the program in act 506 the next time the program runs.
The next time the program runs may be determined in different
manners. For example, the program may be run when activated by a
user, or when determined by a scheduling mechanism of the operating
system. If multiple instances of the same program are run at the
same time, only one instance of the program can be provided with
the geo-fence events to avoid duplication of event delivery and the
resultant duplicate action from the program on receipt of a
particular geo-fence event. In one or more embodiments, the one or
more geo-fence events are the most recent geo-fence enter event and
the most recent geo-fence exit event for each geo-fence associated
with the program (or at least each geo-fence associated with the
program for which geo-fence events are detected).
[0056] Thus, the geo-fence events for multiple geo-fences
associated with a program are coalesced and provided to the program
as an ordered collection of geo-fence events in act 506.
Furthermore, by providing the geo-fence events to the program when
the program is run based on the scheduling mechanism of the
operating system, the providing of the geo-fence events to the
program is harmonized with the scheduling mechanism of the
operating system. Mechanisms to provide geo-fence events to the
program separate from the scheduling mechanism are not employed,
preventing the scheduling mechanism from being circumvented and
preventing conservation periods from being interrupted due to
detected geo-fence events.
[0057] The techniques discussed herein thus support use of
geo-fences in a manner that conserves power and prevents abuse by
various programs. By coalescing geo-fence events and harmonizing
the geo-fence events with the scheduling mechanism of the operating
system, the scheduling mechanism of the operating system cannot be
circumvented by a program having numerous geo-fences that are
triggered. The techniques also provide a most recent geo-fence
enter and geo-fence exit event to a program, providing current
geographically relevant information to the program.
[0058] Although particular functionality is discussed herein with
reference to particular modules, it should be noted that the
functionality of individual modules discussed herein can be
separated into multiple modules, and/or at least some functionality
of multiple modules can be combined into a single module.
Furthermore, it should be noted that a particular module discussed
herein as performing an action includes that particular module
itself performing the action, or alternatively that particular
module invoking or otherwise accessing another component or module
that performs the action (or performs the action in conjunction
with that particular module). Thus, a particular module performing
an action includes that particular module itself performing the
action and/or another module invoked or otherwise accessed by that
particular module performing the action.
[0059] FIG. 6 illustrates an example system generally at 600 that
includes an example computing device 602 that is representative of
one or more systems and/or devices that may implement the various
techniques described herein. The computing device 602 may be, for
example, a server of a service provider, a device associated with a
client (e.g., a client device), an on-chip system, and/or any other
suitable computing device or computing system.
[0060] The example computing device 602 as illustrated includes a
processing system 604, one or more computer-readable media 606, and
one or more I/O Interfaces 608 that are communicatively coupled,
one to another. Although not shown, the computing device 602 may
further include a system bus or other data and command transfer
system that couples the various components, one to another. A
system bus can include any one or combination of different bus
structures, such as a memory bus or memory controller, a peripheral
bus, a universal serial bus, and/or a processor or local bus that
utilizes any of a variety of bus architectures. A variety of other
examples are also contemplated, such as control and data lines.
[0061] The processing system 604 is representative of functionality
to perform one or more operations using hardware. Accordingly, the
processing system 604 is illustrated as including hardware elements
610 that may be configured as processors, functional blocks, and so
forth. This may include implementation in hardware as an
application specific integrated circuit or other logic device
formed using one or more semiconductors. The hardware elements 610
are not limited by the materials from which they are formed or the
processing mechanisms employed therein. For example, processors may
be comprised of semiconductor(s) and/or transistors (e.g.,
electronic integrated circuits (ICs)). In such a context,
processor-executable instructions may be electronically-executable
instructions.
[0062] The computer-readable media 606 is illustrated as including
memory/storage 612. The memory/storage 612 represents
memory/storage capacity associated with one or more
computer-readable media. The memory/storage 612 may include
volatile media (such as random access memory (RAM)) and/or
nonvolatile media (such as read only memory (ROM), Flash memory,
optical disks, magnetic disks, and so forth). The memory/storage
612 may include fixed media (e.g., RAM, ROM, a fixed hard drive,
and so on) as well as removable media (e.g., Flash memory, a
removable hard drive, an optical disc, and so forth). The
computer-readable media 606 may be configured in a variety of other
ways as further described below.
[0063] Input/output interface(s) 608 are representative of
functionality to allow a user to enter commands and information to
computing device 602, and also allow information to be presented to
the user and/or other components or devices using various
input/output devices. Examples of input devices include a keyboard,
a cursor control device (e.g., a mouse), a microphone (e.g., for
voice inputs), a scanner, touch functionality (e.g., capacitive or
other sensors that are configured to detect physical touch), a
camera (e.g., which may employ visible or non-visible wavelengths
such as infrared frequencies to detect movement that does not
involve touch as gestures), and so forth. Examples of output
devices include a display device (e.g., a monitor or projector),
speakers, a printer, a network card, tactile-response device, and
so forth. Thus, the computing device 602 may be configured in a
variety of ways as further described below to support user
interaction.
[0064] Computing device 602 also includes a geo-fence system 614.
Geo-fence system 614 provides various geo-fence functionality,
including coalescing geo-fence, as discussed above. Geo-fence
system 614 can implement, for example, the system 200 of FIG.
2.
[0065] Various techniques may be described herein in the general
context of software, hardware elements, or program modules.
Generally, such modules include routines, programs, objects,
elements, components, data structures, and so forth that perform
particular tasks or implement particular abstract data types. The
terms "module," "functionality," and "component" as used herein
generally represent software, firmware, hardware, or a combination
thereof. The features of the techniques described herein are
platform-independent, meaning that the techniques may be
implemented on a variety of computing platforms having a variety of
processors.
[0066] An implementation of the described modules and techniques
may be stored on or transmitted across some form of
computer-readable media. The computer-readable media may include a
variety of media that may be accessed by the computing device 602.
By way of example, and not limitation, computer-readable media may
include "computer-readable storage media" and "computer-readable
signal media."
[0067] "Computer-readable storage media" refers to media and/or
devices that enable persistent storage of information and/or
storage that is tangible, in contrast to mere signal transmission,
carrier waves, or signals per se. Thus, computer-readable storage
media refers to non-signal bearing media. The computer-readable
storage media includes hardware such as volatile and non-volatile,
removable and non-removable media and/or storage devices
implemented in a method or technology suitable for storage of
information such as computer readable instructions, data
structures, program modules, logic elements/circuits, or other
data. Examples of computer-readable storage media may include, but
are not limited to, RAM, ROM, EEPROM, flash memory or other memory
technology, CD-ROM, digital versatile disks (DVD) or other optical
storage, hard disks, magnetic cassettes, magnetic tape, magnetic
disk storage or other magnetic storage devices, or other storage
device, tangible media, or article of manufacture suitable to store
the desired information and which may be accessed by a
computer.
[0068] "Computer-readable signal media" refers to a signal-bearing
medium that is configured to transmit instructions to the hardware
of the computing device 602, such as via a network. Signal media
typically may embody computer readable instructions, data
structures, program modules, or other data in a modulated data
signal, such as carrier waves, data signals, or other transport
mechanism. Signal media also include any information delivery
media. The term "modulated data signal" means a signal that has one
or more of its characteristics set or changed in such a manner as
to encode information in the signal. By way of example, and not
limitation, communication media include wired media such as a wired
network or direct-wired connection, and wireless media such as
acoustic, RF, infrared, and other wireless media.
[0069] As previously described, hardware elements 610 and
computer-readable media 606 are representative of instructions,
modules, programmable device logic and/or fixed device logic
implemented in a hardware form that may be employed in some
embodiments to implement at least some aspects of the techniques
described herein. Hardware elements may include components of an
integrated circuit or on-chip system, an application-specific
integrated circuit (ASIC), a field-programmable gate array (FPGA),
a complex programmable logic device (CPLD), and other
implementations in silicon or other hardware devices. In this
context, a hardware element may operate as a processing device that
performs program tasks defined by instructions, modules, and/or
logic embodied by the hardware element as well as a hardware device
utilized to store instructions for execution, e.g., the
computer-readable storage media described previously.
[0070] Combinations of the foregoing may also be employed to
implement various techniques and modules described herein.
Accordingly, software, hardware, or program modules and other
program modules may be implemented as one or more instructions
and/or logic embodied on some form of computer-readable storage
media and/or by one or more hardware elements 610. The computing
device 602 may be configured to implement particular instructions
and/or functions corresponding to the software and/or hardware
modules. Accordingly, implementation of modules as a module that is
executable by the computing device 602 as software may be achieved
at least partially in hardware, e.g., through use of
computer-readable storage media and/or hardware elements 610 of the
processing system. The instructions and/or functions may be
executable/operable by one or more articles of manufacture (for
example, one or more computing devices 602 and/or processing
systems 604) to implement techniques, modules, and examples
described herein.
[0071] As further illustrated in FIG. 6, the example system 600
enables ubiquitous environments for a seamless user experience when
running applications on a personal computer (PC), a mobile device,
and/or other devices. Services and applications run substantially
similar in these environments for a common user experience when
transitioning from one device to the next while utilizing an
application, playing a video game, watching a video, and so on.
[0072] In the example system 600, multiple devices are
interconnected through a central computing device. The central
computing device may be local to the multiple devices or may be
located remotely from the multiple devices. In one or more
embodiments, the central computing device may be a cloud of one or
more server computers that are connected to the multiple devices
through a network, the Internet, or other data communication
link.
[0073] In one or more embodiments, this interconnection
architecture enables functionality to be delivered across multiple
devices to provide a common and seamless experience to a user of
the multiple devices. Each of the multiple devices may have
different physical requirements and capabilities, and the central
computing device uses a platform to enable the delivery of an
experience to the device that is both tailored to the device and
yet common to all devices. In one or more embodiments, a class of
target devices is created and experiences are tailored to the
generic class of devices. A class of devices may be defined by
physical features, types of usage, or other common characteristics
of the devices.
[0074] In various implementations, the computing device 602 may
assume a variety of different configurations, such as for computer
616 or mobile 618 uses. Each of these configurations includes
devices that may have generally different constructs and
capabilities, and thus the computing device 602 may be configured
according to one or more of the different device classes. For
instance, the computing device 602 may be implemented as the
computer 616 class of a device that includes a personal computer,
desktop computer, a multi-screen computer, laptop computer,
netbook, and so on. The computing device 602 may also be
implemented as the mobile 618 class of device that includes mobile
devices, such as a mobile phone, portable music player, portable
gaming device, a tablet computer, a wearable device, a multi-screen
computer, and so on.
[0075] The techniques described herein may be supported by these
various configurations of the computing device 602 and are not
limited to the specific examples of the techniques described
herein. This functionality may also be implemented all or in part
through use of a distributed system, such as over a "cloud" 622 via
a platform 624 as described below.
[0076] The cloud 622 includes and/or is representative of a
platform 624 for resources 626. The platform 624 abstracts
underlying functionality of hardware (e.g., servers) and software
resources of the cloud 622. The resources 626 may include
applications and/or data that can be utilized while computer
processing is executed on servers that are remote from the
computing device 602. Resources 626 can also include services
provided over the Internet and/or through a subscriber network,
such as a cellular or Wi-Fi network.
[0077] The platform 624 may abstract resources and functions to
connect the computing device 602 with other computing devices. The
platform 624 may also serve to abstract scaling of resources to
provide a corresponding level of scale to encountered demand for
the resources 626 that are implemented via the platform 624.
Accordingly, in an interconnected device embodiment, implementation
of functionality described herein may be distributed throughout the
system 600. For example, the functionality may be implemented in
part on the computing device 602 as well as via the platform 624
that abstracts the functionality of the cloud 622.
[0078] Although the subject matter has been described in language
specific to structural features and/or methodological acts, it is
to be understood that the subject matter defined in the appended
claims is not necessarily limited to the specific features or acts
described above. Rather, the specific features and acts described
above are disclosed as example forms of implementing the
claims.
* * * * *