【问题标题】:Android Studio integrate Google Maps API v2Android Studio 集成 Google Maps API v2
【发布时间】:2015-03-22 13:09:40
【问题描述】:

我正在尝试创建一个示例,以使用 Android Studio 在 Android 应用上显示 Google 地图。我的意图是支持 API 级别 14 及以上。当我使用 Google Map Activity 创建一个新项目时,它可以正常工作,但使用的是 SupportMapFragment 而不是 MapFragment,建议与 API 级别 12 及更高级别一起使用。
我遵循了Getting Started Google 开发者指南。

我看不到地图。当我想显示具有地图的活动时,应用程序将关闭。错误在于设置内容视图的行。

setContentView(R.layout.activity_map);

而我的 activity_map.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:name="com.google.android.gms.maps.MapFragment"/>

在 buld.gradle (Module: app) 我在依赖项中有以下行

compile 'com.google.android.gms:play-services:6.5.87'

在 AndroidManifest.xml 中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.albanianwonders.googlemapapiv2" >


<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!--
         The following two permissions are not required to use
         Google Maps Android API v2, but are recommended.
    -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <activity android:name=".MapActivity"
        android:label="@string/title_activity_map">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

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

</application>

我得到的错误是

28088-28088/com.albanianwonders.googlemapapiv2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.albanianwonders.googlemapapiv2/com.albanianwonders.googlemapapiv2.MapActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
        at android.app.ActivityThread.access$700(ActivityThread.java:157)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5319)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:467)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:360)
        at android.app.Activity.setContentView(Activity.java:1932)
        at com.albanianwonders.googlemapapiv2.MapActivity.onCreate(MapActivity.java:14)
        at android.app.Activity.performCreate(Activity.java:5326)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
            at android.app.ActivityThread.access$700(ActivityThread.java:157)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5319)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        at com.google.maps.api.android.lib6.c.ck.a(Unknown Source)
        at com.google.maps.api.android.lib6.c.i.a(Unknown Source)
        at com.google.maps.api.android.lib6.c.el.a(Unknown Source)
        at com.google.maps.api.android.lib6.c.ab.a(Unknown Source)
        at com.google.maps.api.android.lib6.c.aa.a(Unknown Source)
        at com.google.android.gms.maps.internal.x.onTransact(SourceFile:107)
        at android.os.Binder.transact(Binder.java:310)
        at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source)
        at com.google.android.gms.maps.MapFragment$a.onCreateView(Unknown Source)
        at com.google.android.gms.dynamic.a$4.b(Unknown Source)
        at com.google.android.gms.dynamic.a.a(Unknown Source)
        at com.google.android.gms.dynamic.a.onCreateView(Unknown Source)
        at com.google.android.gms.maps.MapFragment.onCreateView(Unknown Source)
        at android.app.Fragment.performCreateView(Fragment.java:1699)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:879)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1053)
        at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1155)
        at android.app.Activity.onCreateView(Activity.java:4916)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)

我是否在配置中遗漏了什么?
如何验证我是否在 Android Studio 中正确导入了 Google Play 服务?

【问题讨论】:

  • "设置内容视图的行出错。" ——错误是什么?如果您切换到com.google.android.gms.maps.MapFragment,您是否也将活动切换为从Activity 继承(而不是ActionBarActivity)并将AppTheme 切换为不从Theme.AppCompat 继承?
  • 我创建了 2 个独立的项目。第一个来自 Android Studio 提供的模板,第二个没有任何活动。我自己创建了所有文件。
  • 我在问题上添加了错误。
  • 另外一个问题:您似乎没有在清单中提供正确的 Google Maps API 密钥。
  • 我在发布问题时已删除。在我的项目中有,而不是 MY_API_KEY_IS_HERE

标签: android android-studio google-play-services google-maps-android-api-2


【解决方案1】:

我已经阅读了你的代码,代码是正确的。你使用这个库

编译'com.google.android.gms:play-services:4.2+'

【讨论】:

  • 我应该用我当前在 build.gradle 中使用的行替换它吗?我试过了,它不会工作。
【解决方案2】:

感谢您花时间帮助我。
我自己找到了答案。我的错误是我将uses-permissionuses-features 放在&lt;application&gt; ... &lt;/application&gt; 标签内。

它们必须放在&lt;manifest&gt; ... &lt;/manifest&gt; 标签内。

正确的 AndroidManifest.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.albanianwonders.googlemapapiv2" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!--
     The following two permissions are not required to use
     Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity android:name=".MapActivity"
        android:label="@string/title_activity_map">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

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

</application>
</manifest>

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多