google 地图折线不适用于 android 5.0 版(棒棒糖)

google map polyline is not working on android version 5.0(lollipop)

我正在尝试为 googlemap 绘制折线,它在 android 4.4(kitkat) 版本之前工作正常,但在 android 5.0(lollipop) 中无法正常工作。在棒棒糖工作也该怎么做。你能帮我解决这个问题这是我的 google 地图代码

public class MapLocation extends FragmentActivity implements OnMarkerClickListener {

    GoogleMap map;
    ArrayList<LatLng> markerPoints;

    LatLng origin,dest1,dest2,dest3;    
    Marker marker1,marker2,marker3;

    PolylineOptions lineOptions = new PolylineOptions();

    Polyline line ;
    int pos;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.gmap_direction);

        markerPoints = new ArrayList<LatLng>();

        // Getting reference to SupportMapFragment of the activity_main
        SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

        // Getting Map for the SupportMapFragment
        map = fm.getMap();      

        if(map!=null){

            // Enable MyLocation Button in the Map
            map.setMyLocationEnabled(true);     

            // Getting LocationManager object from System Service LOCATION_SERVICE
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location
            Location location = locationManager.getLastKnownLocation(provider);
            pos = getIntent().getIntExtra("pos",0); 
            try{
            switch (pos) {

               case 1:

                   dest2 = new LatLng(18.545981, 73.902132);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,KALYANINAGAR").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 2:

                   dest2 = new LatLng(17.429122, 78.412745);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Jubilee Hills").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 3:

                   dest2 =  new LatLng(19.115177, 72.909486);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("MUMBAI, POWAI").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 4:

                   dest2 = new LatLng(18.545981, 73.902132);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,MAGARPATTA").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 5:

                   dest2 = new LatLng(12.924438, 77.631537);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Koramangala").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 6:

                   dest2 =  new LatLng(12.9044019,77.6690773);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Sarjapur").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 7:

                   dest2 = new LatLng(12.972442, 77.639195);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Indiranagar").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 8:

                   dest2 = new LatLng(12.968719, 77.747883);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Whitefield").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
                   //  dest1 = new LatLng(19.115177, 72.909486);
            }

            // Showing the current location in Google Map
            map.moveCamera(CameraUpdateFactory.newLatLng(dest2));

            // Zoom in the Google Map
            map.animateCamera(CameraUpdateFactory.zoomTo(15));     

            marker2.showInfoWindow();   


            if(location!=null){
                onLocationChanged(location);

            String url = getDirectionsUrl(origin, dest2);               

            DownloadTask downloadTask = new DownloadTask();

            // Start downloading json data from Google Directions API
            downloadTask.execute(url);
            }
            }
            catch(Exception e){

            }
        }       
    }
    /** A class to parse the Google Places in JSON format */
    private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

        // Parsing the data in non-ui thread        
        @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();

                // Starts parsing data
                routes = parser.parse(jObject);    
            }catch(Exception e){
                e.printStackTrace();
            }
            return routes;
        }

        // Executes in UI thread, after the parsing process
        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> result) {
            ArrayList<LatLng> points = null;
            //PolylineOptions lineOptions = null;

            MarkerOptions markerOptions = new MarkerOptions();

            // Traversing through all the routes
            for(int i=0;i<result.size();i++){
                points = new ArrayList<LatLng>();
                //lineOptions = new PolylineOptions();              

                // Fetching i-th route
                List<HashMap<String, String>> path = result.get(i);

                // Fetching all the points in i-th route
                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);                       
                }

                // Adding all the points in the route to LineOptions
                lineOptions.addAll(points);
                lineOptions.width(4);
                lineOptions.color(Color.BLUE);

            }

            // Drawing polyline in the Google Map for the i-th route
            //map.addPolyline(lineOptions); 
            line = map.addPolyline(lineOptions);
        }           
    }
} 

尝试为您的onPostExecute修改代码:

@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
        ArrayList<LatLng> points = null;
        //PolylineOptions lineOptions = null;

        //MarkerOptions markerOptions = new MarkerOptions();

        points = new ArrayList<LatLng>();

        // Traversing through all the routes
        for(int i=0;i<result.size();i++){
            //points = new ArrayList<LatLng>();
            //lineOptions = new PolylineOptions();              

            // Fetching i-th route
            List<HashMap<String, String>> path = result.get(i);

            // Fetching all the points in i-th route
            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);                       
            }

            // Adding all the points in the route to LineOptions
            //lineOptions.addAll(points);
            //lineOptions.width(4);
            //lineOptions.color(Color.BLUE);

        }

        // Drawing polyline in the Google Map for the i-th route
        //map.addPolyline(lineOptions); 

        lineOptions.addAll(points);
        lineOptions.width(4);
        lineOptions.color(Color.BLUE); 
        line = map.addPolyline(lineOptions);
    }           

我在 for 循环之前移动了您的列表 points 实例,并且在 for 循环之后移动了 lineOptions

希望对您有所帮助。

Now Again Google 发布了一个新的 API 但他们还没有更新文档 properly.To 连接到 API,您需要创建一个实例Google 播放服务 API 客户端。

 mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .addApi(LocationServices.API)
    .build();

连接到 Google Play 服务和位置服务 API 后,您可以获取用户设备的最后已知位置。当您的应用程序连接到这些设备时,您可以使用融合位置提供程序的 getLastLocation() 方法来检索设备位置。为此,您必须在 Class/Activity

中实现此接口
implements
    ConnectionCallbacks, OnConnectionFailedListener

然后你可以找到这个实现的方法

@Override
    public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
            mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

这是我的完整code into this thread .文档 is here