La aplicación se bloquea al utilizar Google Maps v2 en la mayoría de los dispositivos

Estoy tratando de codificar alguna aplicación que utilice la API de Google Maps. El mapa se muestra en la actividad principal.

En algunos teléfonos, incluido el emulador, la aplicación se bloquea inmediatamente después de iniciarse. El único teléfono con el que trabaja es mi Galaxy S1, que ejecuta CM10.1 (4.2.2).

Se bloquea en mi HTC DESIRE HD (4.2.2 también)

MainActivity.java:

import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends Activity { public void ToastLoadShout(String msg){Toast.makeText(this, msg, Toast.LENGTH_LONG).show();} static final LatLng HAMBURG = new LatLng(53.558, 9.927); static final LatLng KIEL = new LatLng(53.551, 9.993); static final LatLng gps = new LatLng(0, 0); static double lat=0.0; static double lon=0.0; private GoogleMap map; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); turnGPSOn(); map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) .getMap(); // Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG) // .title("Hamburg")); Marker kiel = map.addMarker(new MarkerOptions() .position(KIEL) .title("Free shyt") .snippet("Come and take this shit") .icon(BitmapDescriptorFactory .fromResource(R.drawable.ic_launcher))); ImageView locate; locate = (ImageView) findViewById(R.id.locate); locate.setOnClickListener(new OnClickListener() { public void onClick(View v) { ReNewCoordinates(); if (lat==0&&lon==0) ToastLoadShout("Try again in a few seconds."); else { map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat,lon), 10)); ToastLoadShout("your location is: "+lat+" , "+lon); map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); Marker loc = map.addMarker(new MarkerOptions() .position(new LatLng(lat,lon)) .icon(BitmapDescriptorFactory .fromResource(R.drawable.loc))); } } }); map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(50.909474,13.917618), 10000)); map.animateCamera(CameraUpdateFactory.zoomTo(1), 20, null); // Move the camera instantly to hamburg with a zoom of 15. //map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat,lon), 15)); // Zoom in, animating the camera. //map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); //ToastLoadShout("your location is: "+lat+" , "+lon); ImageView add; add = (ImageView) findViewById(R.id.add); add.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, Add.class); startActivity(intent); } }); } private void turnGPSOn() { String provider = android.provider.Settings.Secure.getString( getContentResolver(), android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if (!provider.contains("gps")) { // if gps is disabled final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("3")); sendBroadcast(poke); ToastLoadShout("Turning GPS on.."); } } public void ReNewCoordinates(){ LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // Called when a new location is found by the network location provider. lat = (location.getLatitude()); lon = (location.getLongitude()); } public void onProviderDisabled(String provider) {} public void onProviderEnabled(String provider) {} public void onStatusChanged(String provider, int status,Bundle extras) {}}; locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Tengo el logcat del HTC aquí:

 08-01 18:46:29.929: I/Process(4007): Sending signal. PID: 4007 SIG: 9 08-01 18:46:32.031: D/skia(4024): new locale en-Latn-GB 08-01 18:46:32.141: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.151: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.151: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.161: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.171: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.231: W/GooglePlayServicesUtil(4024): Google Play services out of date. Requires 3159100 but found 2012110 08-01 18:46:32.231: D/AndroidRuntime(4024): Shutting down VM 08-01 18:46:32.231: W/dalvikvm(4024): threadid=1: thread exiting with uncaught exception (group=0x40b10930) 08-01 18:46:32.241: E/AndroidRuntime(4024): FATAL EXCEPTION: main 08-01 18:46:32.241: E/AndroidRuntime(4024): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.MainActivity}: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread.access$600(ActivityThread.java:153) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.os.Handler.dispatchMessage(Handler.java:99) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.os.Looper.loop(Looper.java:137) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread.main(ActivityThread.java:5227) 08-01 18:46:32.241: E/AndroidRuntime(4024): at java.lang.reflect.Method.invokeNative(Native Method) 08-01 18:46:32.241: E/AndroidRuntime(4024): at java.lang.reflect.Method.invoke(Method.java:511) 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 08-01 18:46:32.241: E/AndroidRuntime(4024): at dalvik.system.NativeStart.main(Native Method) 08-01 18:46:32.241: E/AndroidRuntime(4024): Caused by: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.google.android.gms.internal.xb(Unknown Source) 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.google.android.gms.maps.model.BitmapDescriptorFactory.aX(Unknown Source) 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromResource(Unknown Source) 08-01 18:46:32.241: E/AndroidRuntime(4024): at com.example.free.MainActivity.onCreate(MainActivity.java:52) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.Activity.performCreate(Activity.java:5104) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 08-01 18:46:32.241: E/AndroidRuntime(4024): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262) 08-01 18:46:32.241: E/AndroidRuntime(4024): ... 11 more 

Y el logcat del emulador:

 08-01 15:27:48.565: E/Trace(981): error opening trace file: No such file or directory (2) 08-01 15:27:49.305: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.326: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.345: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.366: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.385: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.565: D/dalvikvm(981): GC_CONCURRENT freed 200K, 4% free 8223K/8519K, paused 36ms+5ms, total 163ms 08-01 15:27:49.565: D/dalvikvm(981): WAIT_FOR_CONCURRENT_GC blocked 88ms 08-01 15:27:49.745: W/GooglePlayServicesUtil(981): Google Play services out of date. Requires 3159100 but found 1 08-01 15:27:49.745: D/AndroidRuntime(981): Shutting down VM 08-01 15:27:49.755: W/dalvikvm(981): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 08-01 15:27:49.765: E/AndroidRuntime(981): FATAL EXCEPTION: main 08-01 15:27:49.765: E/AndroidRuntime(981): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.MainActivity}: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread.access$600(ActivityThread.java:130) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.os.Handler.dispatchMessage(Handler.java:99) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.os.Looper.loop(Looper.java:137) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread.main(ActivityThread.java:4745) 08-01 15:27:49.765: E/AndroidRuntime(981): at java.lang.reflect.Method.invokeNative(Native Method) 08-01 15:27:49.765: E/AndroidRuntime(981): at java.lang.reflect.Method.invoke(Method.java:511) 08-01 15:27:49.765: E/AndroidRuntime(981): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 08-01 15:27:49.765: E/AndroidRuntime(981): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-01 15:27:49.765: E/AndroidRuntime(981): at dalvik.system.NativeStart.main(Native Method) 08-01 15:27:49.765: E/AndroidRuntime(981): Caused by: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 15:27:49.765: E/AndroidRuntime(981): at com.google.android.gms.internal.xb(Unknown Source) 08-01 15:27:49.765: E/AndroidRuntime(981): at com.google.android.gms.maps.model.BitmapDescriptorFactory.aX(Unknown Source) 08-01 15:27:49.765: E/AndroidRuntime(981): at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromResource(Unknown Source) 08-01 15:27:49.765: E/AndroidRuntime(981): at com.example.free.MainActivity.onCreate(MainActivity.java:52) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.Activity.performCreate(Activity.java:5008) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 08-01 15:27:49.765: E/AndroidRuntime(981): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 08-01 15:27:49.765: E/AndroidRuntime(981): ... 11 more 08-01 15:28:19.685: I/Process(981): Sending signal. PID: 981 SIG: 9 08-01 15:52:15.355: E/Trace(1058): error opening trace file: No such file or directory (2) 08-01 15:52:16.015: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.025: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.055: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.075: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.095: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.265: D/dalvikvm(1058): GC_CONCURRENT freed 206K, 4% free 8223K/8519K, paused 76ms+5ms, total 157ms 08-01 15:52:16.265: D/dalvikvm(1058): WAIT_FOR_CONCURRENT_GC blocked 31ms 08-01 15:52:16.326: W/GooglePlayServicesUtil(1058): Google Play services out of date. Requires 3159100 but found 1 08-01 15:52:16.335: D/AndroidRuntime(1058): Shutting down VM 08-01 15:52:16.335: W/dalvikvm(1058): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 08-01 15:52:16.355: E/AndroidRuntime(1058): FATAL EXCEPTION: main 08-01 15:52:16.355: E/AndroidRuntime(1058): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.MainActivity}: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread.access$600(ActivityThread.java:130) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.os.Handler.dispatchMessage(Handler.java:99) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.os.Looper.loop(Looper.java:137) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread.main(ActivityThread.java:4745) 08-01 15:52:16.355: E/AndroidRuntime(1058): at java.lang.reflect.Method.invokeNative(Native Method) 08-01 15:52:16.355: E/AndroidRuntime(1058): at java.lang.reflect.Method.invoke(Method.java:511) 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-01 15:52:16.355: E/AndroidRuntime(1058): at dalvik.system.NativeStart.main(Native Method) 08-01 15:52:16.355: E/AndroidRuntime(1058): Caused by: java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.google.android.gms.internal.xb(Unknown Source) 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.google.android.gms.maps.model.BitmapDescriptorFactory.aX(Unknown Source) 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromResource(Unknown Source) 08-01 15:52:16.355: E/AndroidRuntime(1058): at com.example.free.MainActivity.onCreate(MainActivity.java:52) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.Activity.performCreate(Activity.java:5008) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 08-01 15:52:16.355: E/AndroidRuntime(1058): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 08-01 15:52:16.355: E/AndroidRuntime(1058): ... 11 more 

Simplemente haga lo siguiente para comprobar si los servicios de Google Play están disponibles:

 int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); if(status == ConnectionResult.SUCCESS) { //Success! Do what you want }else{ GooglePlayServicesUtil.getErrorDialog(status, this, status); } 

Comprobará los servicios de Google Play y si no están disponibles, solicitará al usuario que los descargue de Google Play

Parece que los teléfonos en los que estás probando no tienen instalados los pre-requisitos más recientes de Google Play Services.

Si echa un vistazo aquí , encontrará una sección sobre cómo puede asegurarse de que los dispositivos tengan instalado el servicio de juegos de Google APK y, en caso contrario, solicite al usuario que lo instale.

También tenga en cuenta que el emulador no es compatible con emuladores que ejecutan una plataforma API menos que Andorid 4.2.2 (se hace referencia aquí en la primera sección)

 GoogleApiAvailability googleApiAvailability=GoogleApiAvailability.getInstance(); int status=googleApiAvailability.isGooglePlayServicesAvailable(getActivity()); if (status != ConnectionResult.SUCCESS) { int requestCode = 10; Dialog dialog = googleApiAvailability.getErrorDialog(getActivity(),status,requestCode); dialog.show(); }else{} 

Consulta aquí los servicios de Google Play disponibles en tu teléfono. Si se produce un error, se mostrará un cuadro de diálogo de error enviado por Google Play Services. He trabajado en mi aplicación con Google Maps v2 en Samsung Galaxy S3 y su trabajo bien.

Tengo la misma excepción en mi aplicación:

 java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized 

En mi caso, tengo que llamar BitmapDescriptorFactory método estático BitmapDescriptorFactory después de inicializar el objeto Google Map.

Lea los comentarios:

 // This line initilizes the map asynchronously. It requires implementation // of OnMapReadyCallback interface. // And when it is inizilized, it calls onMapReady(GoogleMap googleMap) mapFragment.getMapAsync(this); // The following method is implemented in my activity @Override public void onMapReady(GoogleMap googleMap) { ... some code ... currentLocationIcon = BitmapDescriptorFactory.fromResource(R.drawable.report_location_current) ... some code ... } 
  • ¿Hay alguna manera de invocar la navegación desde un navegador móvil?
  • Android google maps no se puede ampliar con compás activo
  • Animar la rotación del Marcador en google map v2
  • Mostrar texto en el polígono android Google map v2
  • ¿Debo usar MapView o MapFragment
  • Zoom automático en Google Maps en java? (Dependiendo de la resolución de pantalla de Android)
  • Marcador arrastrable de Android MapView
  • MyLocationOverlay o LocationManager para actualizar la ubicación actual
  • Actividad de filtraciones de MapView (sin servicio de ubicación)
  • ¿Se filtra siempre la primera instancia de MapActivity?
  • Inicializar MapFragment mediante programación con Google Maps API v2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.