2016-06-29 2 views
0

У меня есть служба LocationService, которая получает местоположение пользователя в фоновом режиме и отправляет трансляцию активности с широтой и долготой. Это код, найденный в принятом ответе на этот вопрос Background service with location listener in androidОбновление карты google с использованием службы определения местоположения

Я создал проект с помощью Google Maps Activity, предоставляемого Android Studio. В MapsActivity я широковещательные статистов, как этот

public class newMessage extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (action.equalsIgnoreCase(LocationService.BROADCAST_ACTION)) { 
       Bundle extra = intent.getExtras(); 
       latitude = extra.getDouble("Latitude"); 
       longitude = extra.getDouble("Longitude"); 

       System.out.println("Latitude: "+latitude); 
       System.out.println("Longitude: "+longitude); 

       LatLng newLocation = new LatLng(latitude,longitude); 
      } 
     } 
    } 

теперь я хочу, чтобы обновить карту с новым местоположением, но я понятия не имею, как это сделать. Возможно ли это с моей текущей настройкой?

ответ

1

объявить широковещательный приемник в деятельности и показать маркер текущего местоположения

public BroadcastReceiver locationUpdateReceiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //show current location marker 
mMap.addMarker(new MarkerOptions().position(/*your lat long*/).title("My Location"))); 
     } 
    }; 
+0

Именно то, что мне нужно! Большое спасибо. – Jaimy

1

Вам необходимо создать locationService, где вы можете получить свое текущее местоположение. Проверьте этот пример:

public class LocationService extends Service implements 
     LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    private static final String TAG = LocationService.class.getSimpleName(); 
    protected GoogleApiClient mGoogleApiClient; 
    protected LocationRequest mLocationRequest; 
    protected Location mCurrentLocation; 

    @Override 
    public void onCreate() { 

    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     buildGoogleApiClient(); 
     mGoogleApiClient.connect(); 
     return START_NOT_STICKY; 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     Log.i("fixedrec", TAG + ">Connected to GoogleApiClient"); 
     if (mCurrentLocation == null) { 
      mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
      mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
     } 
     startLocationUpdates(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
     mGoogleApiClient.disconnect(); 
     Log.d("fixedrec", TAG+ ">StoppingService"); 
     mNM.cancel(NOTIFICATION); 
     stopForeground(true); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     //plase where you get your locations 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     Log.d("fixedrec", TAG + "> Connection failed: ConnectionResult.getErrorCode() = " 
       + connectionResult.getErrorCode()); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    protected void startLocationUpdates() { 
     LocationServices.FusedLocationApi.requestLocationUpdates(
       mGoogleApiClient, mLocationRequest, this); 
     Log.i("fixedrec", TAG + "> StartLocationUpdates"); 
    } 


    protected synchronized void buildGoogleApiClient() { 
     Log.i("fixedrec", TAG + "> Building GoogleApiClient"); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(10000); 
     mLocationRequest.setFastestInterval(5000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    } 
} 

Чтобы передать вам местоположение по применению вы можете использовать BroadcastReceiver или EventBus как Отто. Затем просто создайте googleMap и добавьте маркер с полученным местоположением.

Не забудьте йо locationPermissions записи внутри файла манифеста и внутри вашего кода, если вы имеете дело с SDK> = 23

Также вы можете изучить этот проект. Fixedrec3

Все, что вам нужно, есть.

+0

Спасибо! Я посмотрю на проект. У меня уже есть служба сервисов и я использую широковещательную рассылку для отправки местоположения в эту деятельность, поэтому я не знаю, что происходит. Но проект может дать мне толчок в правильном направлении. – Jaimy

+0

Попробуйте скомпилировать его и посмотреть, что он делает. Затем вы можете скопировать и вставить код внутри своего проекта, чтобы все работало. Старайтесь избегать использования BroadCastReciever - это сложно. Вместо этого используйте otto. –

+0

Мне нужно использовать BroadcastReveiver. Это требование для школьного проекта. Но сейчас у меня это работает. Спасибо за вашу помощь. Обязательно взгляните на проект Fixedrec3 и отто! – Jaimy

Смежные вопросы