简体   繁体   English

如何使用API​​级别为10的Google Maps API v2?

[英]How to use Google Maps API v2 with API level 10?

According to 1 the code posted there can be used for Android API 12 or later. 根据1发布的代码,可用于Android API 12或更高版本。 I tried the code on an emulator having API level 10 (Google API platform 2.3.3) and I get the following famous error: 我在具有API级别10(Google API平台2.3.3)的模拟器上尝试了代码,我收到以下着名错误:

E/AndroidRuntime( 429): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example..../com.example....MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

I copy-paste my .xml file below. 我复制粘贴下面的.xml文件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

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

So I assume the fragment element is not supported...(?). 所以我假设不支持fragment元素......(?)。 I tried the same code in an emulator with API level 17 and I get that message (which as I am reading is currently an issue of the emulator): 我在API级别为17的模拟器中尝试了相同的代码,然后我收到了该消息(我正在阅读的是当前模拟器的一个问题):

This app won't run unless you update Google Play Services.

I do not have a real device having level 17 to test it, but I assume that it might work. 我没有一个真正的设备有17级来测试它,但我认为它可能会工作。

Do I have any mistake in the above code specifically for level 10? 我是否在上述代码中专门针对10级有任何错误? What is the code currently supported by Google, in order to develop maps in an android device with API level 10? Google目前支持的代码是什么,以便在API级别为10的Android设备中开发地图?

1 https://developers.google.com/maps/documentation/android/start 1 https://developers.google.com/maps/documentation/android/start

UPDATE: After changing to FragmentActivity and SupportMapFragment I get the following: 更新:更改为FragmentActivitySupportMapFragment我得到以下内容:

W/dalvikvm( 6718): Unable to resolve superclass of Lmaps/a/du; (406)
W/dalvikvm( 6718): Link of class 'Lmaps/a/du;' failed
W/dalvikvm( 6718): Unable to resolve superclass of Lmaps/a/ej; (2358)
W/dalvikvm( 6718): Link of class 'Lmaps/a/ej;' failed
W/dalvikvm( 6718): Unable to resolve superclass of Lmaps/j/k; (2374)
W/dalvikvm( 6718): Link of class 'Lmaps/j/k;' failed
E/dalvikvm( 6718): Could not find class 'maps.j.k', referenced from method maps. y.ae.a
W/dalvikvm( 6718): VFY: unable to resolve new-instance 3566 (Lmaps/j/k;) in Lmap s/y/ae;
D/dalvikvm( 6718): VFY: replacing opcode 0x22 at 0x007d
D/dalvikvm( 6718): VFY: dead code 0x007f-008f in Lmaps/y/ae;.a(Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;Z)Lmaps/y/ae;

And after 2 seconds: 2秒后:
Google Maps Android API Authorization failure

UPDATE 2: I changed the project to build target for android 10 (I had it for android 4.2). 更新2:我改变了项目为android 10构建目标(我有它为Android 4.2)。 So now I do not see the authorization failure). 所以现在我没有看到授权失败)。 I also paste my api accesses from google 我还从谷歌粘贴我的api访问 api访问 .

I do not have proguard enabled in my .properties of the project ie,: 我没有在项目的.properties中启用proguard,即:
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-10
android.library.reference.1=../../adt-bundle-windows-x86/sdk/extras/google/google_play_services/libproject/google-play-services_lib

The problem still remains: 问题仍然存在:

01-12 09:57:36.306: D/dalvikvm(9072): DexOpt: couldn't find field Landroid/content/res/Configuration;.smallestScreenWidthDp
01-12 09:57:36.306: W/dalvikvm(9072): VFY: unable to resolve instance field 24
01-12 09:57:36.306: D/dalvikvm(9072): VFY: replacing opcode 0x52 at 0x0012
01-12 09:57:36.306: D/dalvikvm(9072): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
01-12 09:57:36.326: W/dalvikvm(1914): disableGcForExternalAlloc: false
01-12 09:57:36.446: D/dalvikvm(9072): GC_CONCURRENT freed 186K, 45% free 3135K/5639K, external 0K/0K, paused 3ms+2ms
01-12 09:57:36.476: W/dalvikvm(9072): Unable to resolve superclass of Lmaps/a/du; (406)
01-12 09:57:36.476: W/ResourceType(7905): getEntry failing because entryIndex 303 is beyond type entryCount 133
01-12 09:57:36.476: W/ResourceType(7905): Failure getting entry for 0x7f02012f (t=1 e=303) in package 0 (error -2147483647)
01-12 09:57:36.476: W/ResourceType(7905): getEntry failing because entryIndex 827 is beyond type entryCount 133
01-12 09:57:36.476: W/dalvikvm(9072): Link of class 'Lmaps/a/du;' failed
01-12 09:57:36.476: W/dalvikvm(9072): Unable to resolve superclass of Lmaps/a/ej; (2358)
01-12 09:57:36.476: W/dalvikvm(9072): Link of class 'Lmaps/a/ej;' failed
01-12 09:57:36.476: W/dalvikvm(9072): Unable to resolve superclass of Lmaps/j/k; (2374)
01-12 09:57:36.476: W/dalvikvm(9072): Link of class 'Lmaps/j/k;' failed
01-12 09:57:36.486: E/dalvikvm(9072): Could not find class 'maps.j.k', referenced from method maps.y.ae.a
01-12 09:57:36.486: W/dalvikvm(9072): VFY: unable to resolve new-instance 3566 (Lmaps/j/k;) in Lmaps/y/ae;
01-12 09:57:36.486: D/dalvikvm(9072): VFY: replacing opcode 0x22 at 0x007d
01-12 09:57:36.496: D/dalvikvm(9072): VFY: dead code 0x007f-008f in Lmaps/y/ae;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;Z)Lmaps/y/ae;
01-12 09:57:36.546: I/keystore(1270): uid: 1000 action: e -> 7 state: 3 -> 3 retry: 4
01-12 09:57:36.556: I/keystore(1270): uid: 1000 action: e -> 7 state: 3 -> 3 retry: 4
<01-12 09:57:36.576: W/ResourceType(7905): Failure getting entry for 0x7f02033b (t=1 e=827) in package 0 (error -2147483647)
01-12 09:57:36.576: V/WindowManager(1369): Finished animation in AppWindowToken{410a0930 token=HistoryRecord{4099f2f0 com.example..../.MainActivity}} @ 20019326
01-12 09:57:36.596: W/ResourceType(7905): getEntry failing because entryIndex 303 is beyond type entryCount 133
01-12 09:57:36.616: W/ResourceType(7905): Failure getting entry for 0x7f02012f (t=1 e=303) in package 0 (error -2147483647)
01-12 09:57:36.616: W/ResourceType(7905): getEntry failing because entryIndex 827 is beyond type entryCount 133
01-12 09:57:36.616: W/ResourceType(7905): Failure getting entry for 0x7f02033b (t=1 e=827) in package 0 (error -2147483647)
01-12 09:57:36.686: D/dalvikvm(9072): GC_CONCURRENT freed 276K, 45% free 3257K/5895K, external 0K/0K, paused 4ms+9ms
01-12 09:57:36.876: I/keystore(1270): uid: 1000 action: e -> 7 state: 3 -> 3 retry: 4
01-12 09:57:37.026: D/ATRecorder(9072): com.htc.autotest.dlib.RecordEngine in loader dalvik.system.DexClassLoader@405d2328
01-12 09:57:37.046: D/WindowManagerImpl(9072): addView, new view, mViews[0]: com.android.internal.policy.impl.PhoneWindow$DecorView@405220f0
01-12 09:57:37.056: I/keystore(1270): uid: 1000 action: e -> 7 state: 3 -> 3 retry: 4
01-12 09:57:37.117: D/PhoneApp(1491): EVENT_QUERY_MO_PACKAGES
01-12 09:57:37.137: D/libEGL(9072): loaded /system/lib/egl/libGLES_android.so
01-12 09:57:37.147: D/WindowManagerImpl(1369): finishRemoveViewLocked, mViews[1]: com.android.internal.policy.impl.PhoneWindow$DecorView@40957078
01-12 09:57:37.147: I/ActivityManager(1369): Displayed com.example..../.MainActivity: +931ms
. 01-12 09:57:37.147: W/SchedPolicy(9072): add_tid_to_cgroup failed to write '' (Invalid argument); background=0
01-12 09:57:37.157: D/libEGL(9072): loaded /system/lib/egl/libEGL_adreno200.so
01-12 09:57:37.157: W/InputManagerService(1369): [unbindCurrentClientLocked] Disable input method client.
01-12 09:57:37.157: W/InputManagerService(1369): [startInputLocked] Enable input method client.
01-12 09:57:37.187: D/libEGL(9072): loaded /system/lib/egl/libGLESv1_CM_adreno200.so

而不是使用com.google.android.gms.maps.MapFragment使用com.google.android.gms.maps.SupportMapFragment ,对于Activity它必须切换为FragmentActivity如下面的评论中所述

i use below code hope use full to you:- 我使用下面的代码希望对你充分利用: -

packages and extend 包和扩展

import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class UserLocation extends FragmentActivity 

code

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    SupportMapFragment mapFragment = (SupportMapFragment) fragmentManager
            .findFragmentById(R.id.map);
    googleMap = mapFragment.getMap();

works for me. 适合我。

SupportMapFragment SupportMapFragment

http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html

For earlier APIs, you need to use SupportmapFragment . 对于早期的API,您需要使用SupportmapFragment See the SupportMapFragment docs , Basically use class="com.google.android.gms.maps.SupportMapFragment" instead of class="com.google.android.gms.maps.MapFragment" 请参阅SupportMapFragment文档 ,基本上使用class="com.google.android.gms.maps.SupportMapFragment"而不是class="com.google.android.gms.maps.MapFragment"

{ Use this as a Reference for codes.. http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/ {使用此作为代码的参考.. http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/

also in the above example one has to use his own Api Key in metadata tag of manifest instructions for generating Api key are given } 同样在上面的示例中,必须使用自己的Api Key在元数据标签中生成Api密钥的清单指令}

now if you want to implement this code in android 2.3 现在如果你想在android 2.3中实现这个代码


1)first change the Manifest 1)首先更改清单

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="17" />

then Rightclick>Properties>Android>Android 2.3 然后右键单击>属性> Android> Android 2.3


2)there are two google play service libraries 2)有两个谷歌播放服务库

   a)..\sdk\extras\google\google_play_services_froyo\libproject\google-play-services_lib

   b)..\sdk\extras\google\google_play_services\libproject\google-play-services_lib

if you'r working on android 2.3 try having the first one a as a library project (you will first need to import it as a library project File>import>................) 如果您正在使用android 2.3 尝试将第一个作为库项目 (您将首先需要将其作为库项目导入>> import> ................ )


3)then follow instructions here 3)然后按照说明在这里


4)see to it that your Google play services app is up to date on your device 4)确保您的Google Play服务应用在您的设备上是最新的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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