gpt4 book ai didi

android - 使用 Google API(Lv. 17)在真正的 Android 2.3 设备上空白 GoogleMap

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:44:13 28 4
gpt4 key购买 nike

问题描述,请先阅读此内容

我正在尝试让我的简单应用程序显示用户的位置,该应用程序在 Android 2.3 到 Android 4.0+ 设备上运行。 map 不会显示在真正的 Android 2.3 设备上。

该应用目前可以在 Android 4.0+ 设备上按我的要求运行并显示 map ,没有任何问题。

因为它可以在Android 4.0+ 上毫无问题地显示 map ,所以我推测问题应该不是Google Maps V2 的设置或权限问题。

但是当我在 Android 2.3 设备上尝试时, map 区域将是一片空白,如下图所示:

enter image description here

该应用程序使用 ActionBarSherlock、Google Maps API v2 和 SupportMapFragment。针对 SDK 17 构建,最小 SDK 10。


代码 fragment

我粘贴并修剪了代码以显示唯一相关的部分,如果您需要其他任何内容,请发表评论。

activity_layout.xml

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

Activity .java

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.SupportMapFragment;

public class Activity extends SherlockFragmentActivity{

private static GoogleMap map;

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

............

//Set up map view
map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

............

OnMarkerDragListener markerDragListener = new OnMarkerDragListener() {

@Override
public void onMarkerDragStart(Marker marker) {
// Called when the marker drag is started

}

@Override
public void onMarkerDragEnd(Marker marker) {
// Called when the marker is dropped down.
coords[0] = marker.getPosition().latitude;
coords[1] = marker.getPosition().longitude;
RestoreUIwithSavedLocation(coords);
Log.d(TAG, "Pin Dropped at: " + coords[0] + ", " + coords[1]);
}

@Override
public void onMarkerDrag(Marker marker) {

}
};

map.setOnMarkerDragListener(markerDragListener);
}

在真正的 Android 2.3 设备上运行时的 Logcat:

01-04 21:16:52.020: D/dalvikvm(19074): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/p/s; (427)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/p/s;' failed
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/y/bo; (3820)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/y/bo;' failed
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/i/k; (4208)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/i/k;' failed
01-04 21:16:52.150: E/dalvikvm(19074): Could not find class 'maps.i.k', referenced from method maps.z.ag.a
01-04 21:16:52.150: W/dalvikvm(19074): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag;
01-04 21:16:52.150: D/dalvikvm(19074): VFY: replacing opcode 0x22 at 0x006d
01-04 21:16:52.160: D/dalvikvm(19074): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag;

使用 Google API Lv.10 在模拟器上运行时的 logcat

03-25 13:00:47.974: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:47.992: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:47.992: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.002: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.002: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.022: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.072: D/AndroidRuntime(751): Shutting down VM
03-25 13:00:48.072: W/dalvikvm(751): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-25 13:00:48.133: E/AndroidRuntime(751): FATAL EXCEPTION: main
03-25 13:00:48.133: E/AndroidRuntime(751): java.lang.RuntimeException: Unable to start activity ComponentInfo{Activity}: java.lang.NullPointerException
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.os.Looper.loop(Looper.java:130)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-25 13:00:48.133: E/AndroidRuntime(751): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 13:00:48.133: E/AndroidRuntime(751): at java.lang.reflect.Method.invoke(Method.java:507)
03-25 13:00:48.133: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-25 13:00:48.133: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-25 13:00:48.133: E/AndroidRuntime(751): at dalvik.system.NativeStart.main(Native Method)
03-25 13:00:48.133: E/AndroidRuntime(751): Caused by: java.lang.NullPointerException
03-25 13:00:48.133: E/AndroidRuntime(751): at Activity.onCreate(Activity.java:250)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-25 13:00:48.133: E/AndroidRuntime(751): ... 11 more

Activity.onCreate(Activity.java:250) 指向这一行:

map.setOnMarkerDragListener(markerDragListener);

我尝试过的

奇怪的是,如果我添加这一行

<uses-library android:name="com.google.android.maps" />

AndroidManifest.xml,logcat 什么都不显示(没有错误没有警告), map 仍然是空白的。但是有人发帖说这条线解决了她/他的空白 map 问题:https://stackoverflow.com/questions/15595357/android-supportmapfragment-google-play-services-issue

在我项目的 Android Dependencies 文件夹中,我有这些 *.jar 文件:

actionbar-sherlock-4.2-library.jar
google-play-services_lib.jar
android-support-v4.jar
actionbarsherlock-plugin-maps-4.2.0.jar
google-play-services.jar

来自this post的回答, 我知道 Google map 在模拟器上可能无法正常运行。我所需要的只是让 map 显示在我失败的真实 Android 2.3 设备上。

此外,我也密切关注了这些帖子并尝试了他们的方法(如果适用于我的情况)但仍然对我的问题不满意:

Google Map V2 android map referencing

How to use Google Maps API v2 with API level 10?

Google MapFragment is blank (white) with Could not find class 'maps.j.k'

Using ActionBarSherlock With the New SupportMapFragment

如果您需要更多信息,请在下方留言,我会尽力添加。

最佳答案

好的,经过数小时的思考和尝试,我想我可以将此问题标记为已修复。

问题是由2.3设备中的错误的日期和时间引起的。

由于长时间没电,2.3 设备上的时间和日期重置为 2013/01/01(如您在日志输出中看到的,日期显示为 01/04)。这也可以解释为什么使用相同的代码运行时,Google Maps V2 不会出现在 2.3 设备上,但会出现在 4.0+ 设备上(因为我使用的 4.0+ 设备具有正确的时间)。

我认为由于此设备与 Google map 服务器之间的日期和时间存在巨大差异,因此它们之间的通信出现故障(不知道确切原因,但应该是一些时间戳的东西)。

当我手动将2.3设备的日期和时间设置为当前时间时,问题立即解决。

这个问题很奇怪,注销显示如下:

Could not find class 'maps.i.k', referenced from method maps.z.ag.a

如此模棱两可,让我很难想到问题是由设备上的错误日期和时间引起的。

因此,下次如果您在使用 Google Maps API 时遇到问题,请按照以下步骤进行检查:

  • 检查您设备的日期和时间设置是否与您的当前时区(不幸的是,日志输出不会返回太多建设性信息来引导您考虑日期和时间)
  • 检查您是否在 API 控制台中启用了正确的服务(启用 Google Maps API Android V2 而不是 Google Maps API V2,记录如果你做错了什么,将返回 Authentication Failed这一步)
  • 检查您是否使用了正确的 keystore 来获取 API secret (日志会给你一个提示说 Authentication Failed
  • 检查您是否包含了正确的库文件

感谢任何试图帮助我的人,我希望这个问题和解决方案可以帮助其他人。

关于android - 使用 Google API(Lv. 17)在真正的 Android 2.3 设备上空白 GoogleMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15615759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com