2014-01-23 26 views
8

我已经通过了tutorial for Geofencing,我有疑问。Android Geofencing

geofencing是否要求您连续监视用户的位置?

或者您将添加Geofence的位置客户端在转换已过时会自动触发吗?

这可能看起来像一个明显的问题,但本教程从未提及任何有关从位置管理器请求位置更新的内容。

回答

-2
 public class MainActivity extends FragmentActivity implements 
      OnMarkerDragListener { 

     private GoogleMap googleMap; 
     private int distance; 
     private SupportMapFragment mapFragment; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      SupportMapFragment mapFragment = ((SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map)); 
      googleMap = mapFragment.getMap(); 
      googleMap.setOnMarkerDragListener(this); 
      distance = 100; 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
      26.788707, 75.828108), 15)); 
      createGeofence(26.788707, 75.828108, distance, "CIRCLE", "GEOFENCE"); 
     } 
     private void createGeofence(double latitude, double longitude, int radius, 
      String geofenceType, String title) { 

      Marker stopMarker = googleMap.addMarker(new MarkerOptions() 
      .draggable(true) 
      .position(new LatLng(latitude, longitude)) 
      .title(title) 
      .icon(BitmapDescriptorFactory 
       .fromResource(R.drawable.stop_marker))); 

      googleMap.addCircle(new CircleOptions() 
      .center(new LatLng(latitude, longitude)).radius(radius) 
      .fillColor(Color.parseColor("#B2A9F6"))); 
     } 
     @Override 
     public void onMarkerDrag(Marker marker) { 
     } 
     @Override 
     public void onMarkerDragEnd(Marker marker) { 
      LatLng dragPosition = marker.getPosition(); 
      double dragLat = dragPosition.latitude; 
      double dragLong = dragPosition.longitude; 
      googleMap.clear(); 
      createGeofence(dragLat, dragLong, distance, "CIRCLE", "GEOFENCE"); 
      Toast.makeText(
      MainActivity.this, 
      "onMarkerDragEnd dragLat :" + dragLat + " dragLong :" 
       + dragLong, Toast.LENGTH_SHORT).show(); 
      Log.i("info", "on drag end :" + dragLat + " dragLong :" + dragLong); 

     } 
     @Override 
     public void onMarkerDragStart(Marker marker) { 
     } 



    main .xml 

    < ?xml version="1.0" encoding="utf-8"?> 
    < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     < fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      class="com.google.android.gms.maps.SupportMapFragment" /> 
    < /RelativeLayout> 
2

嗨它依赖于应用程序的requirement.The位置跟踪可以根据具体的要求,下面的方式来实现。 1.请求设备的一个镜头位置 如果应用程序要求请求设备在屏幕上的当前位置说某些API需要经纬度为输入或需要本地使用经纬度来显示有关屏幕当前位置的一些信息,地图屏幕等,应用程序可以请求位置管理器获取设备的当前位置在同一活动类别中。此方法是不使用连续跟踪节省应用程序使用的电池。 和最适合当需要在特定或几个屏幕的位置,但可以给不太准确位置

2.定时器/服务为基础的方法进行连续位置跟踪 如果应用程序在前台要求连续位置跟踪,以及作为背景,您可以编写自己的服务以及时跟踪位置。在这种实现中,服务开始在某段时间间隔内侦听位置更新并在某段时间关闭所有更新。

使用自己的服务进行位置跟踪,可以跟踪背景中的位置。如果定时器间隔相应确定,则可以满足期望的精度。连续位置跟踪基于

3.地理围栏的方式连续位置跟踪 谷歌Play服务的地理围栏基础的方法取得了很容易地监视某些半径被称为地理围栏的地理位置区域。 无需编写自己的服务来进行连续的位置跟踪。 与基于定时器/服务的方法相比,更好的电池优化。当应用程序需要定位跟踪用于分钟的位置更新

的更多信息,请访问http://mobisoftinfotech.com/3-ways-to-implement-efficient-location-tracking-in-android-applications/

+1

嘿 这种方法是不适合的,根据该文章“当第一次用户获取设备的位置(该位置可能是期望准确性),它会在预先确定的半径范围内创建地理围栏,并关闭位置更新。此类地理围栏的退出事件被破坏,这意味着如果用户退出地理围栏,应用程序将销毁相同的地理围栏并将开始位置更新“ 。 我的问题是,你不需要知道用户在每个时刻的确切位置,知道用户何时退出该地理围栏? – Traxex1909