在我的 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/