2017-01-17 1 views
-2

코드가 활동 중입니다. 그러나 조각으로 구현할 수 없습니다. 코드는 활동에 있습니다. 조각으로 현재 위치를 찾도록 도와주세요. 마커를 조각에 넣을 수는 있지만 조각으로 현재 위치를 가져올 수 없습니다.지도를 다루는 응용 프로그램을 처리하는 동안 도움을주십시오.조각의 현재 위치를지도에 표시합니다.

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    LocationListener { 
private GoogleMap mMap; 
GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 
Marker mCurrLocationMarker; 
LocationRequest mLocationRequest; 
ArrayList<LatLng> markerPoints=new ArrayList<LatLng>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     checkLocationPermission(); 
    } 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map1); 
    mapFragment.getMapAsync(this); 
} 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(this, 
       Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      buildGoogleApiClient(); 
      mMap.setMyLocationEnabled(true); 
     } 
    } 
    else { 
     buildGoogleApiClient(); 
     mMap.setMyLocationEnabled(true); 
    } 
    mMap.addMarker(new MarkerOptions() 
      .title("Delivered") 
      .position(new LatLng(10.01, 76.34))); 
    mMap.addMarker(new MarkerOptions() 
      .title("Delivered") 
      .position(new LatLng(9.99, 76.31))); 
    mMap.addMarker(new MarkerOptions() 
      .title("Delivered") 
      .position(new LatLng(9.99, 76.30))); 
    mMap.addMarker(new MarkerOptions() 
      .title("Delivered") 
      .position(new LatLng(10.52, 76.21))); 
    markerPoints.add(new LatLng(10.01, 76.34)); 
    markerPoints.add(new LatLng(9.99, 76.31)); 
    markerPoints.add(new LatLng(9.99, 76.30)); 
    markerPoints.add(new LatLng(10.52, 76.21)); 
    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng point) { 
      mMap.clear(); 
      markerPoints.clear(); 
     } 
    }); 
} 
private String getDirectionsUrl(LatLng origin,LatLng dest){ 
    String str_origin = "origin="+origin.latitude+","+origin.longitude; 
    String str_dest = "destination="+dest.latitude+","+dest.longitude; 
    String sensor = "sensor=false"; 
    String waypoints = ""; 
    for(int i=2;i<markerPoints.size();i++){ 
     LatLng point = (LatLng) markerPoints.get(i); 
     if(i==2) 
      waypoints = "waypoints="; 
     waypoints += point.latitude + "," + point.longitude + "|"; 
    } 
    String parameters = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints; 
    String output = "json"; 
    String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; 
    return url; 
} 
private String downloadUrl(String strUrl) throws IOException { 
    String data = ""; 
    InputStream iStream = null; 
    HttpURLConnection urlConnection = null; 
    try{ 
     URL url = new URL(strUrl); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.connect(); 
     iStream = urlConnection.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 
     StringBuffer sb = new StringBuffer(); 
     String line = ""; 
     while((line = br.readLine()) != null){ 
      sb.append(line); 
     } 
     data = sb.toString(); 
     br.close(); 
    }catch(Exception e){ 
    }finally{ 
     iStream.close(); 
     urlConnection.disconnect(); 
    } 
    return data; 
} 
private class DownloadTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... url) { 
     String data = ""; 
     try{ 
      data = downloadUrl(url[0]); 
     }catch(Exception e){ 
      Log.d("Background Task",e.toString()); 
     } 
     return data; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     ParserTask parserTask = new ParserTask(); 
     parserTask.execute(result); 
    } 
} 
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{ 
    @Override 
    protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) { 
     JSONObject jObject; 
     List<List<HashMap<String, String>>> routes = null; 
     try{ 
      jObject = new JSONObject(jsonData[0]); 
      DirectionsJSONParser parser = new DirectionsJSONParser(); 
      routes = parser.parse(jObject); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return routes; 
    } 
    @Override 
    protected void onPostExecute(List<List<HashMap<String, String>>> result) { 
     ArrayList<LatLng> points = null; 
     PolylineOptions lineOptions = null; 
     for(int i=0;i<result.size();i++){ 
      points = new ArrayList<LatLng>(); 
      lineOptions = new PolylineOptions(); 
      List<HashMap<String, String>> path = result.get(i); 
      for(int j=0;j<path.size();j++){ 
       HashMap<String,String> point = path.get(j); 
       double lat = Double.parseDouble(point.get("lat")); 
       double lng = Double.parseDouble(point.get("lng")); 
       LatLng position = new LatLng(lat, lng); 
       points.add(position); 
      } 
      lineOptions.addAll(points); 
      lineOptions.width(2); 
      lineOptions.color(Color.RED); 
     } 
     mMap.addPolyline(lineOptions); 
    }} 
protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .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(this, 
      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(); 
    } 
    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)); 
    if (mGoogleApiClient != null) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    }} 
@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
} 
public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; 
public boolean checkLocationPermission(){ 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.ACCESS_FINE_LOCATION)) { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        MY_PERMISSIONS_REQUEST_LOCATION); 
     } else { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        MY_PERMISSIONS_REQUEST_LOCATION);} 
     return false;} else { 
     return true; 
    }} 
@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_LOCATION: { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       if (ContextCompat.checkSelfPermission(this, 
         Manifest.permission.ACCESS_FINE_LOCATION) 
         == PackageManager.PERMISSION_GRANTED) { 
        if (mGoogleApiClient == null) { 
         buildGoogleApiClient();} 
        mMap.setMyLocationEnabled(true);} 
      } else { 
       Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show(); 
      } 
      return;}}}} 
+0

무엇이 문제입니까? 코드 –

+0

으로 더 자세히 설명합니다. 우리는 현재 위치를 알아 내려고 노력하고 있습니다. 우리는 활동을하고 있지만 조각에 통합 할 수는 없습니다. – Arya

+0

그래요. 조각난 문제는 뭐니? –

답변

0

조각에 있다면 중요하지 않습니다. 다른 방법처럼 현재 위치를 가져와야합니다. FusedLocationProviderApi

+0

하지만 FusedLocationProviderApi를 구현하는 방법은 코드를 제공 할 수 있습니까? – Arya

0

활동에서 위치를 가져와야하고 위치를 가져 와서 조각에 보내야합니다. 하지만 위치 API 샘플을 찾고 있다면 확인하십시오. 클릭 Sample

나는 그것이 당신을 위해 작동하기를 바랍니다. 행운을 빌어 요 !!

관련 문제