【问题标题】:Unable to load map_view on fullscreen on Flutter无法在 Flutter 上全屏加载 map_view
【发布时间】:2018-09-30 17:32:54
【问题描述】:

当我尝试全屏加载谷歌地图时遇到问题。 我已关注 pub.dartland.org 中的所有文档以获取 map_view :

在我的 AndroidManifest.xml 中:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

还添加了:

 <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/>
 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

当然,随着 apiKey 的改变,还有:

<activity android:name="com.apptreesoftware.mapview.MapActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>

我还在 build.graddle 中添加了 kotlin 依赖项。 所以现在我可以在设备上看到 staticUri 地图,很好,但是当我点击这张地图以全屏显示时,应用程序崩溃并出现以下错误:

D/AndroidRuntime( 4373): Shutting down VM
E/AndroidRuntime( 4373): FATAL EXCEPTION: main
E/AndroidRuntime( 4373): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.apptreesoftware.mapview.MapActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment

E/AndroidRuntime( 4373): Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment
E/AndroidRuntime( 4373): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
E/AndroidRuntime( 4373): Caused by: java.lang.RuntimeException: API key not found.  Check that <meta-data android:name="com.google.android.geo.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml

我尝试添加:

<meta-data android:name="com.google.android.geo.API_KEY" android:value="xxxxxxxxxxxxxxx"/>

但同样的问题,也许有人有想法?

编辑: 这是我的 AndroidManifest.xml :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="my-app"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">

            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="XXXXXXXXXXXXXX"/>
            <!-- <meta-data android:name="com.google.android.geo.API_KEY" android:value="XXXXXXXXXXXXXXXX"/> -->
            <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>       
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name="com.apptreesoftware.mapview.MapActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>

    </application>
</manifest>

【问题讨论】:

  • 你能粘贴你的 androidmanifest.xml 文件吗?
  • 已使用 AndroidManifest.xml 文件编辑帖子

标签: google-maps android-activity flutter


【解决方案1】:

好的,您需要将 google maps 元数据移到您的 activity 标签之外,如下所示:

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.myapp">

            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

            <application
                android:name="io.flutter.app.FlutterApplication"
                android:label="my-app"
                android:icon="@mipmap/ic_launcher">


                    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="XXXXXXXXXXXXXX"/>
                    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> 

                <activity
                    android:name=".MainActivity"
                    android:launchMode="singleTop"
                    android:theme="@style/LaunchTheme"
                    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
                    android:hardwareAccelerated="true"
                    android:windowSoftInputMode="adjustResize">

                    <meta-data
                        android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                        android:value="true" />
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
                <activity android:name="com.apptreesoftware.mapview.MapActivity" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>

            </application>
        </manifest>

您可以在此处找到更多信息:

https://developer.android.com/guide/topics/manifest/meta-data-element

总而言之,元数据与父组件相关,因此在这种情况下,您需要所有应用程序的元数据,而不仅仅是一个活动:)。

【讨论】:

  • 现在很好用,不知道为什么,但我可能应该了解更多关于 android 开发的知识,而不是直接进入 Flutter 开发。谢谢!
  • 我在回答中添加了更多描述:)
猜你喜欢
  • 2019-05-17
  • 2019-03-12
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多