1

I am trying to get to the current location of the user. On running the app crashes. The map is working, it points to the default lat long i.e Sydney, But on trying to access current location app crashes. I have created the enableUserLocation method to check for permissions.


    class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

        private lateinit var mMap: GoogleMap
        private lateinit var geofencingClient: GeofencingClient
        private var FINE_LOCATION_ACCESS_REQUEST_CODE = 10001

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_maps)
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            val mapFragment = supportFragmentManager
                .findFragmentById(R.id.map) as SupportMapFragment
            mapFragment.getMapAsync(this)

            geofencingClient = LocationServices.getGeofencingClient(this)
        }

        /**
         * Manipulates the map once available.
         * This callback is triggered when the map is ready to be used.
         * This is where we can add markers or lines, add listeners or move the camera. In this case,
         * we just add a marker near Sydney, Australia.
         * If Google Play services is not installed on the device, the user will be prompted to install
         * it inside the SupportMapFragment. This method will only be triggered once the user has
         * installed Google Play services and returned to the app.
         */
        override fun onMapReady(googleMap: GoogleMap) {
            mMap = googleMap

            // Add a marker in Sydney and move the camera
            val sydney = LatLng(-34.0, 151.0)
            mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))

            enableUserLocation()
        }


        private fun enableUserLocation() {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED
            ) {
                mMap.isMyLocationEnabled = true
            } else {
                //Ask for permission
                if (ActivityCompat.shouldShowRequestPermissionRationale(
                        this,
                        Manifest.permission.ACCESS_FINE_LOCATION
                    )
                ) {
                    //we need to show a user dialog that why the permission is needed and then ask for the permission
                    ActivityCompat.requestPermissions(
                        this,
                        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                        FINE_LOCATION_ACCESS_REQUEST_CODE
                    )
                } else {
                    ActivityCompat.requestPermissions(
                        this,
                        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                        FINE_LOCATION_ACCESS_REQUEST_CODE
                    )
                }

            }


        }

        override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<out String>,
            grantResults: IntArray
        ) {
            if (requestCode == FINE_LOCATION_ACCESS_REQUEST_CODE) {
                if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //We have the permission
                    mMap.isMyLocationEnabled = true
                } else {
                    //we do not have the permission

                }
            }

        }
    }

Here is the logcat error which says it's a runtime exception.


    2020-05-21 14:01:05.064 7621-7628/? E/art: Failed sending reply to debugger: Broken pipe
    2020-05-21 14:01:09.525 7621-7621/com.example.geofencedemo E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.geofencedemo, PID: 7621
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.geofencedemo/com.example.geofencedemo.MapsActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
         Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment
         Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
         Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: calling Fragment constructor caused an exception
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:541)
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851)
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196)
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26)
            at android.app.Activity.performCreate(Activity.java:6662)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.newInstance0(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:523)
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851) 
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196) 
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134) 
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357) 
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26) 
            at android.app.Activity.performCreate(Activity.java:6662) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6077) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
         Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/maps/SupportMapFragment$zzb;
            at com.google.android.gms.maps.SupportMapFragment.<init>(Unknown Source)
            at java.lang.reflect.Constructor.newInstance0(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
            at androidx.fragment.app.Fragment.instantiate(Fragment.java:523) 
            at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
            at androidx.fragment.app.FragmentManagerImpl$6.instantiate(FragmentManagerImpl.java:2851) 
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3196) 
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134) 
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357) 
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
            at com.example.geofencedemo.MapsActivity.onCreate(MapsActivity.kt:26) 
            at android.app.Activity.performCreate(Activity.java:6662) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6077) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
         Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.SupportMapFragment$zzb
            at java.lang.VMClassLoader.findLoadedClass(Native Method)
    2020-05-21 14:01:09.526 7621-7621/com.example.geofencedemo E/AndroidRuntime:     at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:362)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                ... 30 more
         Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/dynamic/zza;
                ... 30 more
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.dynamic.zza" on path: DexPathList[[zip file "/data/app/com.example.geofencedemo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.geofencedemo-2/lib/x86, /system/lib, /vendor/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                ... 30 more

dennisrufigill
  • 379
  • 1
  • 3
  • 14

0 Answers0