android - 从 Google Maps API v2 MapView 更新 Google Play 服务时崩溃

标签 android google-maps android-intent

在我的 Android 项目中,我有一个 MapView (API v2),它在最近的设备(S. Galaxy S3、Google Play 服务是最新的)上运行良好,但如果我在旧设备(LG-C550、Google Play 服务不是最新的),我收到一条错误消息,其中包含更新服务的按钮。问题是应用程序在单击后崩溃。

我的堆栈跟踪:

02-16 06:47:51.537: E/AndroidRuntime(4078): FATAL EXCEPTION: main
02-16 06:47:51.537: E/AndroidRuntime(4078): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.app.ContextImpl.startActivity(ContextImpl.java:648)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:258)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at com.google.android.gms.dynamic.a$5.onClick(Unknown Source)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.view.View.performClick(View.java:2552)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.view.View$PerformClick.run(View.java:8960)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.os.Handler.handleCallback(Handler.java:587)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.os.Looper.loop(Looper.java:123)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at java.lang.reflect.Method.invoke(Method.java:521)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
02-16 06:47:51.537: E/AndroidRuntime(4078):     at dalvik.system.NativeStart.main(Native Method)

运行时异常来自 Google map View (由库创建),它尝试在没有 FLAG_ACTIVITY_NEW_TASK 的情况下从我的应用程序上下文启动 Google Play 服务更新程序。

您认为是否有办法纠正这个由 Google Play 库抛出的异常?

我的 MapActivity 类:

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

import com.google.android.gms.maps.MapView;

public class MapActivity extends Activity {

    private MapView mapView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new RelativeLayout(getApplicationContext()) {
            {
                addView(mapView = new MapView(getApplicationContext()) {
                    {
                        setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
                    }
                });
            }
        });
        mapView.onCreate(savedInstanceState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

}

最佳答案

我发现这个 Google 网上论坛主题有误:https://groups.google.com/d/msg/google-admob-ads-sdk/Nb1kCQB4fJo/m7rQQD9CLIEJ

我必须提供 Activity 上下文而不是应用程序上下文来创建 MapView 实例:

addView(mapView = new MapView(getApplicationContext()) {

替换为:

addView(mapView = new MapView(MapActivity.this) {

如果 Google 团队看到这篇文章,请在您的文档中精确说明:https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapView.html?hl=fr#MapView(android.content.Context) ?我觉得这个很重要

关于android - 从 Google Maps API v2 MapView 更新 Google Play 服务时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470351/

相关文章:

java - 将 ListView 的一行复制到剪贴板中。 Java、SDK、安卓

android - 如何在编辑文本上缩放图像

google-maps - KML/Google map - 指定 iFrame 中嵌入 map 的缩放级别

javascript - 谷歌地图路线 V3 : Multiple directions on a map

java - 在android的默认浏览器选择列表中添加我的浏览器?

java - TranslateAnimation 未按预期工作

android - 当应用程序处于前台状态时,如何计算应用程序使用时间?

javascript - 如何将 "hole"添加到圆形多边形(Google Maps API V3)

android - 如何从相机 Intent 中获取图像路径?

android - 添加联系意向在 ICS 下不返回数据 onActivityResult