繁体   English   中英

Android - map map 在一台设备上是空白的,在其他设备上不是

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM