You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么安卓模拟器报错缺少system image?谷歌地图集成相关问题咨询

解决方案

一、模拟器错误修复

  • 更换带Google Play标识的AVD镜像:不带Google服务框架的原生模拟器无法运行谷歌地图,创建模拟器时选择标注了「Google Play」的系统镜像即可。
  • 更新Google Play服务:启动模拟器后进入内置的Google Play商店,搜索「Google Play服务」升级到最新版本后重启应用测试。
  • 修复依赖冲突:打开app层级build.gradle文件,删除重复的无效依赖行implementation 'com.google.android.material:material:<version>'。
  • 验证API密钥有效性:确认local.properties文件中已正确配置MAPS_API_KEY为谷歌云控制台申请的有效密钥,密钥需开启Maps SDK for Android权限,且绑定的包名、SHA1签名与当前项目完全匹配。
  • 升级地图SDK版本:可将com.google.android.gms:play-services-maps:17.0.1升级到最新稳定版,避免旧版本兼容性问题。

二、Fragment中集成谷歌地图实现步骤

1. 添加布局组件

在Fragment对应的布局XML文件中加入MapView组件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

2. 编写Fragment逻辑代码

Fragment实现OnMapReadyCallback接口,同步MapView的生命周期即可:

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapFragment extends Fragment implements OnMapReadyCallback {
    private MapView mapView;
    private GoogleMap googleMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_map, container, false);
        mapView = rootView.findViewById(R.id.mapView);
        // 初始化MapView
        mapView.onCreate(savedInstanceState);
        // 异步获取地图实例
        mapView.getMapAsync(this);
        return rootView;
    }

    @Override
    public void onMapReady(GoogleMap map) {
        googleMap = map;
        // 自定义地图配置示例:添加标记、移动镜头
        LatLng defaultPosition = new LatLng(39.9042, 116.4074);
        googleMap.addMarker(new MarkerOptions().position(defaultPosition).title("北京"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(defaultPosition, 10f));

        // 已获取定位权限时开启我的位置图层
        if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            googleMap.setMyLocationEnabled(true);
        }
    }

    // 同步MapView生命周期,避免内存泄漏或加载异常
    @Override
    public void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }
}

3. 动态申请权限

在承载Fragment的Activity中先申请定位权限,用户授权完成后再加载地图Fragment,避免权限不足导致地图功能异常。


内容的提问来源于stack exchange,提问作者Ualibek Nurgulan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:09:04