Android Kotlin应用中Google Map无法加载问题求助
安卓Kotlin应用中Google Map无法加载的问题排查请求
开发安卓Kotlin应用时遇到Google Map无法加载的问题,已完成以下配置,且已启用Maps SDK for Android,但地图始终无法显示,请求排查原因。
依赖配置
// Google Maps Location Services implementation 'com.google.android.gms:play-services-location:21.0.1' implementation 'com.google.android.gms:play-services-maps:18.1.0' // KTX for the Maps SDK for Android implementation 'com.google.maps.android:maps-ktx:3.4.0' // (Optional) KTX for the Maps SDK for Android Utility Library implementation 'com.google.maps.android:maps-utils-ktx:3.4.0'
Manifest文件配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <application android:name=".RunTrackerApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.RunTracker" tools:targetApi="31"> <meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name=".ui.MainActivity" android:launchMode="singleInstance" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Fragment布局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_width="match_parent" android:layout_height="match_parent" tools:context=".ui.tracking.TrackingFragment"> <com.google.android.gms.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="0dp" android:contentDescription="@string/tracking_map_view" app:layout_constraintBottom_toTopOf="@+id/clInnerLayout" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> ... </androidx.constraintlayout.widget.ConstraintLayout>
Fragment中的Kotlin代码
@AndroidEntryPoint class TrackingFragment : Fragment(), OnMapReadyCallback { private var _binding: FragmentTrackingBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! private val trackingViewModel: TrackingViewModel by viewModels() // Init Map private lateinit var mapView: GoogleMap override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentTrackingBinding.inflate(inflater, container, false) val root: View = binding.root return root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.mapView.onCreate(savedInstanceState) lifecycleScope.launch { mapView = binding.mapView.awaitMap() } } override fun onDestroyView() { super.onDestroyView() _binding = null } override fun onMapReady(googleMap: GoogleMap) { if (isServiceOK()){ googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) } } private fun isServiceOK(): Boolean { val result = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(requireContext()) if (result == ConnectionResult.SUCCESS) { return true } else if(GoogleApiAvailability.getInstance().isUserResolvableError(result)){ val dialog = GoogleApiAvailability.getInstance() .getErrorDialog(this, ConnectionResult.SERVICE_MISSING, 1012) dialog?.show() } return false } }
内容的提问来源于stack exchange,提问作者Arshad Ali
相关产品推荐
相关产品推荐

