2014-01-23 25 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