Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Application crashes when using Google Maps v2 on most devices

Im trying to code some application that uses Google Maps API. The map is shown in the main activity.

On some phones, including the emulator, the application crashes immediately after starting. The only phone it works with is my Galaxy S1, which runs CM10.1 (4.2.2).

It crashes on my HTC DESIRE HD (4.2.2 as well)

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;
    }

}

I have the logcat of the HTC here:

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.x.b(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

And the emulator's logcat:

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.x.b(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.x.b(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
like image 268
Npv23g Avatar asked Dec 09 '22 13:12

Npv23g


1 Answers

Just do the following to check if google play services are available:

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

    }else{
        GooglePlayServicesUtil.getErrorDialog(status, this, status);
    }

It will check for google play services and if are not available it will prompt user to download them from google play

like image 120
arniotaki Avatar answered Feb 23 '23 02:02

arniotaki