2017-01-10 8 views
-3

Я попробовал этот код, но он показывает мне текущее положение пользователякак показать список маркеров на карте Google


public class DeveloperAdress extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener { 

private static final String var= Config.PORT_CONX; 
private static final String TAG = DeveloperAdress.class.getSimpleName(); 
private static final String url =var+ "listeAddress"; 
private ProgressDialog pDialog; 
private GoogleMap mMap; 
GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 
LocationRequest mLocationRequest; 
Marker mCurrLocationMarker; 
List<Address> adresss; 
public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; 

public DeveloperAdress() { 

} 


public static DeveloperAdress newInstance() { 
    DeveloperAdress fragment = new DeveloperAdress(); 
    Bundle args = new Bundle(); 

    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    adresss=getAllAdresss(); 




} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view= inflater.inflate(R.layout.developer_adress, container, false); 
    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 


    for(Address address:addresss) { 
     // mMap.addMarker(new MarkerOptions().position(new LatLng(address.getLatitude(), address.getLongitude()))); 

     markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
     Marker markert = mMap.addMarker(markerOptions); 
    } 
    return view; 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 

    mMap.getUiSettings().setZoomControlsEnabled(true); 




    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
      buildGoogleApiClient(); 
      mMap.setMyLocationEnabled(true); 
     } 
    } 
    else { 
     buildGoogleApiClient(); 
     mMap.setMyLocationEnabled(true); 
    } 
} 

protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(getContext()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build(); 
    mGoogleApiClient.connect(); 
} 
@Override 
public void onConnected(Bundle bundle) { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(1000); 
    mLocationRequest.setFastestInterval(1000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
    if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onLocationChanged(Location location) { 
    mLastLocation = location; 
    if (mCurrLocationMarker != null) { 
     mCurrLocationMarker.remove(); 
    } 

    //Place current location marker 
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
    MarkerOptions markerOptions = new MarkerOptions(); 
    markerOptions.position(latLng); 
    markerOptions.title("Current Position"); 
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
    mCurrLocationMarker = mMap.addMarker(markerOptions); 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
    mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 

    //stop location updates 
    if (mGoogleApiClient != null) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 


} 


@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 



@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_LOCATION: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // Permission was granted. 
       if (ContextCompat.checkSelfPermission(getContext(), 
         Manifest.permission.ACCESS_FINE_LOCATION) 
         == PackageManager.PERMISSION_GRANTED) { 

        if (mGoogleApiClient == null) { 
         buildGoogleApiClient(); 
        } 
        mMap.setMyLocationEnabled(true); 
       } 

      } else { 

       // Permission denied, Disable the functionality that depends on this permission. 
       Toast.makeText(getContext(), "permission denied", Toast.LENGTH_LONG).show(); 
      } 
      return; 
     } 


    } 
} 
public boolean checkLocationPermission(){ 
    if (ContextCompat.checkSelfPermission(getContext(), 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Asking user if explanation is needed 
     if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), 
       Manifest.permission.ACCESS_FINE_LOCATION)) { 


      ActivityCompat.requestPermissions(getActivity(), 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        MY_PERMISSIONS_REQUEST_LOCATION); 


     } else { 
      ActivityCompat.requestPermissions(getActivity(), 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        MY_PERMISSIONS_REQUEST_LOCATION); 
     } 
     return false; 
    } else { 
     return true; 
    } 
} 



public List<Address> getAllAddresss(){ 

    final List<Address> addresss = new ArrayList<Address>(); 

    JsonArrayRequest prodReq = new JsonArrayRequest(url, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        hidePDialog(); 

        // Parsing json 
        for (int i = 0; i < response.length(); i++) { 
         try { 

          JSONObject obj = response.getJSONObject(i); 
          Address address = new Address(); 
          address.setId(obj.getInt("id")); 
             address.setLongitude(obj.getDouble("longitude")); 
          address.setLatitude(obj.getDouble("latitude")); 

          addresss.add(address); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 



       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "connexion impossible !!"); 
      hidePDialog(); 

     } 
    }); 

    AppController.getInstance().addToRequestQueue(prodReq); 

    return addresss; 

} 
private void hidePDialog() { 
    if (pDialog != null) { 
     pDialog.dismiss(); 
     pDialog = null; 
    } 

} 




@Override 
public void onResume() { 
    super.onResume(); 

} 
} 
+1

Что делать, если вы хотите? Пожалуйста, дайте более подробную информацию о проблеме. –

+0

Спасибо, ребята, я нашел решение: просто извлеките список адресов в предыдущем фрагменте и передайте список в конструкторе этого фрагмента –

ответ

0

Попробуйте это:

googleMap.addMarker(new MarkerOptions() 
      .position(new LatLng(28.7750, 77.4183)) 
      .title("Marker in India") 
      .icon(BitmapDescriptorFactory 
      .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)) 
      .snippet("kochi").draggable(true)); 

Ваш onMapReady(GoogleMap googleMap) не вызывается. Вы должны вызвать getMapAsync на фрагменте карты, чтобы установить OnMapReadyCallback

От the documentation

общественной ничтожной getMapAsync (OnMapReadyCallback обратного вызова)

Устанавливает объект обратного вызова, которая будет вызвана, когда GoogleMap экземпляр готов к использованию.

Добавьте этот код в конце вашего onCreate функции:

MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
mapFragment.getMapAsync(this); 

Используйте Маркер Класс

икону помещают в определенной точке на поверхности карты. Значок маркера рисуется ориентированным на экран устройства, а не на поверхность карты; то есть это не обязательно приведет к изменению ориентации из-за поворотов карты, наклона или масштабирования.

Маркер обладает следующими свойствами:

Якорь

точки на изображении, который будет размещен в положении LatLng маркера. Это значение по умолчанию составляет 50% слева от изображения и внизу изображения.

Позиция

Значение LatLng для позиции маркера на карте. Вы можете изменить это значение в любое время, если хотите переместить маркер.

Название

текстовая строка, которая отображается в информационном окне, когда пользователь вводит маркер. Вы можете изменить это значение в любое время.

Отрывок

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

Иконка

Растровые, который отображается для маркеров. Если значок не отображается, отображается значок по умолчанию.Вы можете указать альтернативную окраску значка по умолчанию, используя defaultMarker (float). Вы не можете изменить значок, как только вы создали маркер.

Drag Статус

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

Видимость

По умолчанию маркер виден. Чтобы сделать маркер невидимым, установите для этого свойства значение false. Вы можете изменить это значение в любое время.