我已经在我的应用程序中实现了Google地图,以显示带有导航按钮的工具栏。
文件:
https://developers.google.com/maps/documentation/android-api/controls#map_toolbar
但是,它正在激发特定的Google Maps意图。
我可以对其进行调整以激发“通用”意图,以便用户选择自己选择的导航应用程序吗?
在此先感谢您的时间。
最佳答案
您无法控制“地图工具栏”。根据the documentation(强调我的观点):
工具栏上显示的图标可用于访问Google Maps移动应用中的地图视图或路线请求
如果要启动自己的Intent,则需要在执行googleMap.getUiSettings().setMapToolbarEnabled(false);
的同时禁用此工具栏,然后实现自己的GoogleMap.OnMarkerClickListener
以显示自定义按钮。
一种解决方法(但很难看)可能是找到Google Map Directions Button(带有GoogleMapDirectionsButton
标签)并覆盖其功能。这是一个工作示例:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private SupportMapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.getUiSettings().setMapToolbarEnabled(true);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(40.42, -3.7), 17));
googleMap.addMarker(new MarkerOptions().position(new LatLng(40.42, -3.7)));
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(final Marker marker) {
View v = findGoogleMapDirectionsButton(mapFragment.getView());
if (v != null) {
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
final LatLng targetLatLng = new LatLng(
marker.getPosition().latitude,
marker.getPosition().longitude);
final Intent intent = new Intent(
Intent.ACTION_VIEW,
Uri.parse("google.navigation:q="
+ targetLatLng.latitude
+ ","
+ targetLatLng.longitude));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MapsActivity.this.startActivity(intent);
}
});
}
return false;
}
});
}
private View findGoogleMapDirectionsButton(View v) {
View directionsButton = null;
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
directionsButton = findGoogleMapDirectionsButton(vg.getChildAt(i));
if (directionsButton != null) {
break;
}
}
} else if (v.getTag() != null
&& "GoogleMapDirectionsButton".equalsIgnoreCase(v.getTag().toString())) {
directionsButton = v;
}
return directionsButton;
}
}