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
我正在尝试为 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