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).
- Cancelar un brindis ya abierto en Android
- Cómo dibujar etiquetas únicas en overlayitem de mapview en android
- Android - Cómo lanzar la intención del mapa de Google en la aplicación android con cierta ubicación, nivel de zoom y marcador
- Propósito de Google Maps 7.0.0 con ubicación
- Cómo utilizar el API AutocompleteFilter de Android Places
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
- Cómo obtener direcciones flecha sin utilizar google maps api
- Cómo agregar la dependencia del proyecto google-play-services.jar para que mi proyecto se ejecute y presente el mapa
- Google map firmó errores clave de api en Android
- Cómo mostrar la ruta entre marcadores en googlemaps
- Cómo especificar el tamaño del icono en el Marcador en Google Maps V2 Android
- Google Map Android API v2 no puede mostrar el mapa en la aplicación de Google Play Store
- Dibuja línea suave entre geopuntos en android
- Android SHA1 liberación keystore no funciona con Google Maps
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 ... }