您想了解的关于Google应用开发中地理围栏的所有信息






4.27/5 (7投票s)
Google应用开发中的地理围栏
毫不夸张地说,开发 Google Android 的“开箱即用”应用绝对是一项艰苦的锻炼。新手和经验丰富的应用开发者都投入了大量时间来构建能够满足 Google Play 服务用户多样化需求的应用。如果您是一位希望开发出色的导航应用的 Google 应用开发者,地理围栏是一个可以立即帮助您实现这一目标的理念。让我们深入探讨这个概念。
地理围栏 - 它们究竟是什么?
嗯,地理围栏基本上是围绕具有特定半径的地理点定义的虚拟区域。'地理点'一词指的是一个真实的地方,例如餐馆、商店、学校等,而该特定位置的圆形区域代表地理围栏的半径。随着基于位置的移动应用在移动应用开发领域成为焦点,地理围栏/地理区域更是锦上添花。
基于地理围栏的 Android 应用 - 如何使用?
由于地理围栏结合了用户当前位置的感知与所有附近的兴趣点,因此基于此概念构建的 Android 应用是寻找能够满足热爱探索目的地的人的各种需求的最佳工具。要使用地理围栏应用,您只需通过指定纬度和经度来标记一个感兴趣的位置。此外,还可以通过添加半径来调整标记位置的邻近度。所有这三个参数,即纬度、经度和半径,定义了一个地理围栏。您可以同时拥有多个地理围栏,从而扩大您对最适合您旅行口味的地点进行搜索。
您需要确保 Google Play 服务可用
并且有一个足够简单的代码来检查它
private boolean servicesConnected() {
// Verifying the availability of Google Play services
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
// If Google Play services is available
if (ConnectionResult.SUCCESS == resultCode) {
// In debug mode, log the status
Log.d("Geofence Detection", "You can Use Google Play services.");
// Continue
return true;
//Google Play services isn't available
} else {
// Fetch the error code
int errorCode = connectionResult.getErrorCode();
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(errorCode, this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
// If Google Play services can provide an error dialog
if (errorDialog != null) {
ErrorDialogFragment errorFragment = new ErrorDialogFragment();
errorFragment.setDialog(errorDialog);
errorFragment.show( getSupportFragmentManager(),"Geofence Detection");
}
地理围栏对象 - 它包含什么?
作为一名 Google 应用开发者,一旦您完成了请求或检查 Google Play 服务,您就可以开始创建地理围栏。每个地理围栏对象包含以下参数
-
纬度、经度和半径
虽然纬度和经度用于标记感兴趣的位置,但半径用于调整在检测到地理围栏之前用户需要接近该位置的距离。此半径值越大,用户在到达地理围栏时触发地理围栏转换警报的可能性就越大。
-
转换类型
Android 应用内置的位置服务可以轻松检测用户何时进入地理围栏半径(“进入”)以及何时走出地理围栏半径(“退出”)或两者兼有。
-
地理围栏 ID
这是一个唯一的字符串,与地理围栏一起存储,并用于从位置服务跟踪中删除地理围栏。
-
过期时间
这是地理围栏保持活动的持续时间。一旦此时间段过期,位置服务将自动删除地理围栏。作为开发者,通常您必须指定地理围栏的过期时间,但您也可以选择维护永久性地理围栏,这对于客户的家庭或工作场所非常有用。
定义地理围栏存储
地理围栏应用必须能够读写持久存储中的地理围栏数据。作为应用开发者,您不应该使用地理围栏对象来实现此目的,而是必须选择有效的存储技术,例如数据库,这些数据库可以方便地存储一组相关数据。您需要使用一个特定的代码片段,该代码片段定义了两个类,它们使用应用的 SharedPreferences 实例来实现无缝存储。虽然 SimpleGeofence 类类似于数据库记录并存储单个地理围栏对象的数据,而 SimpleGeofenceStore 类将 SimpleGeofence 数据读写到 SharedPreferences 实例。
创建地理围栏对象
另一种代码片段使用 SimpleGeofence 和 SimpleGeofenceStore 类从 UI 获取地理围栏数据。此代码将地理围栏数据存储在 SimpleGeofence 对象中,然后将这些对象存储在 SimpleGeofenceStore 对象中,最后创建 Geofence 对象。
发送地理围栏监控请求
为了发送地理围栏监控请求,您需要两个异步操作。第一个操作获取请求的位置客户端,第二个操作使用该客户端发出请求。在这两种情况下,位置服务都会在操作完成后调用一个回调方法。
处理这些操作的最好方法之一是链接方法调用。要实现所需的回调接口,您需要修改活动的类定义,为此您需要添加以下接口
ConnectionCallbacks
- 它指定了位置服务在位置客户端连接或断开连接时调用的方法OnConnectionFailedListener
- 它指定了位置服务在尝试连接位置客户端时发生错误时调用的方法。OnAddGeofencesResultListener
- 它指定了位置服务添加地理围栏后调用的方法。
我们如何使用地理围栏进行监控
让我们看一段代码,它演示了应用如何监控地理围栏。我们在这里使用 getTansitionPendingIntent,您在这里看到的 pending intents 是在 onConnect 方法中定义的。这是它的代码
private void onConnected(Bundle dataBundle) {
…
switch (mRequestType) {
case ADD :
// Get the PendingIntent for the request
mTransitionPendingIntent = getTransitionPendingIntent();
mLocationClient.addGeofences(mCurrentGeofences, pendingIntent, this);
…
}
}
当您决定不再监控它们时,只需将它们从 GeoFence 存储中移除即可
public void removeGeofences(PendingIntent requestIntent) {
// Here we define the removal request
mRequestType = REMOVE_INTENT;
if (!servicesConnected()) {
return;
}
// Store the PendingIntent
mGeofenceRequestIntent = requestIntent;
mLocationClient = new LocationClient(this, this, this);
// If a request is not already underway
if (!mInProgress) {
// Indicate that a request is underway
mInProgress = true;
// Request a connection from the client to Location Services
mLocationClient.connect();
}
}
如果实验是您的议程,您还可以选择将地理围栏与其他各种基于位置的功能结合起来,包括定期更新等。这样做可以让您进一步提升技能和影响力,从而交付一款真正脱颖而出的 Android 应用。