谷歌地图片段显示,但没有地图
Posted
技术标签:
【中文标题】谷歌地图片段显示,但没有地图【英文标题】:Google Maps fragment shows up but there is no map 【发布时间】:2020-04-03 23:56:52 【问题描述】:我在片段中使用地图,但如下面的screenshot 所示,地图没有出现。我确保我有互联网连接和 GPS 信号,所以我认为这不是连接问题。
这是我的片段中的代码:
public class MapViewFragment extends Fragment
MapView mMapView;
private GoogleMap googleMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.location_fragment, container, false);
try
MapsInitializer.initialize(getActivity().getApplicationContext());
catch (Exception e)
e.printStackTrace();
mMapView = rootView.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume(); // needed to get the map to display immediately
mMapView.getMapAsync(new OnMapReadyCallback()
@Override
public void onMapReady(GoogleMap mMap)
googleMap = mMap;
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// For showing a move to my location button
googleMap.setMyLocationEnabled(true);
// For dropping a marker at a point on the Map
LatLng sydney = new LatLng(-34, 151);
googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));
// For zooming automatically to the location of the marker
CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
);
return rootView;
@Override
public void onResume()
super.onResume();
mMapView.onResume();
@Override
public void onPause()
super.onPause();
mMapView.onPause();
@Override
public void onDestroy()
super.onDestroy();
mMapView.onDestroy();
@Override
public void onLowMemory()
super.onLowMemory();
mMapView.onLowMemory();
这里是片段的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_
android:layout_ />
</RelativeLayout>
然后我使用以下过程将此片段插入到我的主要活动布局中:
public void addFragment(Fragment fragment, boolean addToBackStack, String tag)
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (addToBackStack)
ft.addToBackStack(tag);
ft.replace(R.id.container_frame_back, fragment, tag);
ft.commitAllowingStateLoss();
我的 MainActivity 的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_
android:layout_
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/btn1"
android:layout_
android:layout_
android:layout_weight="1"
android:text="Fragment 1 " />
</LinearLayout>
<LinearLayout
android:id="@+id/container_frame_back"
android:layout_
android:layout_
android:layout_marginTop="56dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
所以我真的不明白为什么我没有显示地图,我认为这也不是权限问题,我已经在以前的项目中使用过地图,但这次它只是由于某种原因没有显示...感谢您的回复!
【问题讨论】:
您是否为谷歌地图添加了 API KEY? 是的,我确实在清单中添加了它以及 google_play_services_version 元数据。 【参考方案1】:问题已解决,当您在外部设备上测试应用时,与权限相关的错误消息不会显示在日志中。我的地图片段中的权限有问题。我刚刚添加了以下代码,它工作得很好:
String[] perms = Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION;
requestPermissions(perms, 0); // Use this method in Fragment classes
【讨论】:
以上是关于谷歌地图片段显示,但没有地图的主要内容,如果未能解决你的问题,请参考以下文章