java Android 2.3 和谷歌地图 API v2

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13733581/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 13:49:09  来源:igfitidea点击:

Android 2.3 and google maps API v2

javaandroid

提问by antedesk

Today I tried to use google maps api v2 for Android 2.3.3 My steps:

今天我尝试使用谷歌地图 api v2 for Android 2.3.3 我的步骤:

  • got SHA1 code from debug.keystore
  • create a new project in google apis console
  • register a new id
  • enabled google maps android api v2
  • create an android key using as input SHA1;it.mappe (it.mappe is my package)
  • get API key
  • update AndroidManifest file:

    <permission android:name="it.mappe.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
    
    <uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" />
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    
    <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" >
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="MY_KEY" />
    
            <activity
                android:name="it.mappe.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>
    
  • my main activity

    public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }   
    
  • my activity_main:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"/>
    
  • copy directory ANDROID_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_libto root of your project

  • add /extras/android/compatibility/v4/android-support-v4.jaras external jar

  • add next line to the YOUR_PROJECT/project.propertiesandroid.library.reference.1=google-play-services_lib

  • 从 debug.keystore 得到 SHA1 代码
  • 在 google apis 控制台中创建一个新项目
  • 注册一个新的id
  • 启用谷歌地图 android api v2
  • 使用作为输入 SHA1;it.mappe 创建一个 android 密钥(it.mappe 是我的包)
  • 获取 API 密钥
  • 更新 AndroidManifest 文件:

    <permission android:name="it.mappe.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
    
    <uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" />
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    
    <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" >
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="MY_KEY" />
    
            <activity
                android:name="it.mappe.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>
    
  • 我的主要活动

    public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }   
    
  • 我的活动_主要:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"/>
    
  • 将目录复制ANDROID_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib到项目的根目录

  • 添加/extras/android/compatibility/v4/android-support-v4.jar为外部 jar

  • 将下一行添加到 YOUR_PROJECT/project.propertiesandroid.library.reference.1=google-play-services_lib

When i run it on my samsung galaxy S (with google play services apk), it crashs and logcat shows this errors

当我在我的 samsung Galaxy S(使用 google play services apk)上运行它时,它崩溃并且 logcat 显示此错误

E/AndroidRuntime(6435): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{it.mappe/it.mappe.MainActivity}: 

android.view.InflateException: Binary XML file line #2: Error inflating class fragment
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access00(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    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:581)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:209)
    at android.app.Activity.setContentView(Activity.java:1657)
    at it.mappe.MainActivity.onCreate(MainActivity.java:12)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    ... 11 more
 Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/it.mappe-2.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at android.view.LayoutInflater.createView(LayoutInflater.java:471)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
    ... 19 more

some suggestions?

一些建议?

EDIT

编辑

here my main.xml:

这是我的 main.xml:

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

回答by CommonsWare

<fragment>should be in all lowercase.

<fragment>应该全部小写。

Also, you are using Activity(not FragmentActivity) with SupportMapFragment, and I doubt that combination will work.

此外,您正在使用Activity(not FragmentActivity) with SupportMapFragment,我怀疑这种组合是否有效。

回答by Balaji Jayaraman

Check if the target Google SDK version in the project.properties and the support lib(Android.jar) versions are the same.

检查 project.properties 中的目标 Google SDK 版本和支持的 lib(Android.jar) 版本是否相同。