简体   繁体   中英

maps api v2 android: Binary XML file line #2 error

I have been toiling with the Google-maps API for Android v2 for days now, and cannot figure out how to get this activity working, here is the layout file activity_main.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"/>

Here is MainActivity.java:

package com.gabe.locator;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

And my manifest file:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.gabe.locator"
        android:versionCode="1"
        android:versionName="1.0" >

        <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"/>

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

        <uses-sdk
            android:minSdkVersion="12"
            android:targetSdkVersion="18" />

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.gabe.locator.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

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

    </manifest>

here is my last error trace:

02-06 21:02:57.406: D/AndroidRuntime(29553): Shutting down VM
    02-06 21:02:57.406: W/dalvikvm(29553): threadid=1: thread exiting with uncaught exception (group=0x4162a7c0)
    02-06 21:02:57.416: E/AndroidRuntime(29553): FATAL EXCEPTION: main
    02-06 21:02:57.416: E/AndroidRuntime(29553): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gabe.locator/com.gabe.locator.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread.access$600(ActivityThread.java:153)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.os.Handler.dispatchMessage(Handler.java:99)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.os.Looper.loop(Looper.java:137)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread.main(ActivityThread.java:5289)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at java.lang.reflect.Method.invokeNative(Native Method)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at java.lang.reflect.Method.invoke(Method.java:525)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at dalvik.system.NativeStart.main(Native Method)
    02-06 21:02:57.416: E/AndroidRuntime(29553): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:320)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.Activity.setContentView(Activity.java:1895)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.gabe.locator.MainActivity.onCreate(MainActivity.java:12)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.Activity.performCreate(Activity.java:5133)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  ... 11 more
    02-06 21:02:57.416: E/AndroidRuntime(29553): Caused by: java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.common.GooglePlayServicesUtil.n(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.internal.q.v(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.internal.q.u(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.MapFragment$b.eb(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.MapFragment$b.a(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.dynamic.a.a(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.dynamic.a.onInflate(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.app.Activity.onCreateView(Activity.java:4745)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
    02-06 21:02:57.416: E/AndroidRuntime(29553):  ... 20 more
    02-06 21:03:00.530: I/Process(29553): Sending signal. PID: 29553 SIG: 9

Does anyone have any idea what is causing the crash each time I run this on Cyanogenmod for HTC One S, with android 4.3.1?

Thanks! Gabe

As per Documentation

Note: The Google Maps Android API requires API level 12 or higher for the support of MapFragment objects. If you are targeting an application earlier than API level 12, you can access the same functionality through the SupportMapFragment class. You will also have to include the Android Support Library .

Add this both

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

Under <application> tag in manifest.xml file.

And extends your Activity to FragmentActivity .

Use SupportMapFragment in layout.xml

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

Also extend as FragmentActivity and not as Activity

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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