[英]Android - map map is blank on one device, not others
希望有人可以帮助解决这个问题。 我的 Android 应用程序中有一个 map 片段,但在一台物理设备(具有 2022 年 2 月安全更新的 Android 11)上,它总是空白。 在另一台设备 (Android 8) 以及 Android 11 和 Android 12 AVD 上,地图显示得很好。 我在 logcat 中没有看到任何内容(例如来自无效密钥或缺乏权限的身份验证问题)它只是......从不呈现。
有趣的是,它确实以适当的纬度/经度响应长按(按下)。 我只是盲目地长按以获取它们。
供参考 - 我的布局是:
...
<androidx.fragment.app.FragmentContainerView
xmlns:tools="http:`//schemas.android.com/tools"
android:id="@+id/mfbMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActFlightMap" />
....
相关清单部分:
<application ...>
...
<uses-library
android:name="com.google.android.maps"
android:required="false" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/GoogleMapsKey" />
</application>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<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.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
我的主要代码:
class ActFlightMap : AppCompatActivity(), OnMapReadyCallback,
OnMarkerClickListener, OnGlobalLayoutListener, OnMapLongClickListener, CoroutineScope by MainScope() {
...
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.flightmap)
val mf = supportFragmentManager.findFragmentById(R.id.mfbMap) as SupportMapFragment?
try {
mf?.getMapAsync(this)
} catch (ex: Exception) {
Log.e("MyAppTag", Objects.requireNonNull(ex.localizedMessage))
}
...
}
override fun onMapReady(googleMap: GoogleMap) {
val map = googleMap
map.mapType = GoogleMap.MAP_TYPE_HYBRID
val settings = map.uiSettings
settings.isCompassEnabled = false
settings.isRotateGesturesEnabled = false
settings.isScrollGesturesEnabled = true
settings.isZoomControlsEnabled = false
settings.isZoomGesturesEnabled = true
map.setOnMapLongClickListener(this)
...
}
在上面的代码中,我可以验证实际上调用了 onMapReady 并且 googleMap 是非空的。 我可以向 map 添加元素。长按(如上所述)有效。 logcat 中没有提及地图。 我什至还看到了“按当前位置居中”这个小图标。 这些图块从不在我的 Android 11 手机上绘制,但它在模拟器和我的旧款 (Android 8) 手机上都能完美运行。
想法?
原来这是一个主题问题。
当此主题应用于托管活动(ActFlightMap,上面)时,它不起作用:
<style name="MFBTheme" parent="Theme.AppCompat.DayNight">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
<item name="android:background">@color/colorBackground</item>
<item name="android:windowBackground">@color/colorBackground</item>
<item name="android:colorBackground">@color/colorBackground</item>
</style>
但是,如果我只是将清单中的主题更改为使用@style/Theme.AppCompat.DayNight,那么它在无法正常工作的设备上效果很好。
不知道上面的主题有什么问题,或者为什么它只影响某些设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.