Get location android Kotlin

前端 未结 6 1683
傲寒
傲寒 2020-12-13 07:28

I recently added get location function. When I try to show longitude and latitude, it returns zero.

This my LocationListener class:

inner class Myloc         


        
6条回答
  •  鱼传尺愫
    2020-12-13 07:42

    I would like to help someone who is trying to get location from scratch. Here is the reference: Kotlin Get Current Location

    Code will first check whether location is on or off in device and then will fetch latitude and longitudes and will update it constantly.

    In build.gradle(Module:app) file put this

    compile 'com.google.android.gms:play-services:11.8.0'
    

    activity_main.xml code

    
    
    
        
        
        
        
    
    
    

    MainActivity.kt

    import android.Manifest
    import android.annotation.SuppressLint
    import android.content.Context
    import android.content.Intent
    import android.content.pm.PackageManager
    import android.location.Location
    import android.location.LocationManager
    import android.provider.Settings
    import android.support.v4.app.ActivityCompat
    import android.support.v7.app.AlertDialog
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.util.Log
    import android.widget.TextView
    import android.widget.Toast
    import com.google.android.gms.common.ConnectionResult
    import com.google.android.gms.common.api.GoogleApiClient
    import com.google.android.gms.location.LocationRequest
    import com.google.android.gms.location.LocationServices
    import com.google.android.gms.maps.model.LatLng
    
    class MainActivity : AppCompatActivity(), GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {
    
        private var mLatitudeTextView: TextView? = null
        private var mLongitudeTextView: TextView? = null
        private var mGoogleApiClient: GoogleApiClient? = null
        private var mLocation: Location? = null
        private var mLocationManager: LocationManager? = null
    
        private var mLocationRequest: LocationRequest? = null
        private val listener: com.google.android.gms.location.LocationListener? = null
        private val UPDATE_INTERVAL = (2 * 1000).toLong()  /* 10 secs */
        private val FASTEST_INTERVAL: Long = 2000 /* 2 sec */
    
        private var locationManager: LocationManager? = null
    
        private val isLocationEnabled: Boolean
            get() {
                locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
                return locationManager!!.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager!!.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
            }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            mLatitudeTextView = findViewById(R.id.latitude_textview) as TextView
            mLongitudeTextView = findViewById(R.id.longitude_textview) as TextView
    
            mGoogleApiClient = GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build()
    
            mLocationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    
            Log.d("gggg","uooo");
            checkLocation() //check whether location service is enable or not in your  phone
        }
    
        @SuppressLint("MissingPermission")
        override fun onConnected(p0: Bundle?) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return
            }
    
            startLocationUpdates()
    
            mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient)
    
            if (mLocation == null) {
                startLocationUpdates()
            }
            if (mLocation != null) {
    
                // mLatitudeTextView.setText(String.valueOf(mLocation.getLatitude()));
                //mLongitudeTextView.setText(String.valueOf(mLocation.getLongitude()));
            } else {
                Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show()
            }
        }
    
        override fun onConnectionSuspended(i: Int) {
            Log.i(TAG, "Connection Suspended")
            mGoogleApiClient!!.connect()
        }
    
        override fun onConnectionFailed(connectionResult: ConnectionResult) {
            Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode())
        }
    
        override fun onStart() {
            super.onStart()
            if (mGoogleApiClient != null) {
                mGoogleApiClient!!.connect()
            }
        }
    
        override fun onStop() {
            super.onStop()
            if (mGoogleApiClient!!.isConnected()) {
                mGoogleApiClient!!.disconnect()
            }
        }
    
        @SuppressLint("MissingPermission")
        protected fun startLocationUpdates() {
            // Create the location request
            mLocationRequest = LocationRequest.create()
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                    .setInterval(UPDATE_INTERVAL)
                    .setFastestInterval(FASTEST_INTERVAL)
            // Request location updates
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return
            }
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
                    mLocationRequest, this)
            Log.d("reque", "--->>>>")
        }
    
        override fun onLocationChanged(location: Location) {
    
            val msg = "Updated Location: " +
                    java.lang.Double.toString(location.latitude) + "," +
                    java.lang.Double.toString(location.longitude)
            mLatitudeTextView!!.text = location.latitude.toString()
            mLongitudeTextView!!.text = location.longitude.toString()
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
            // You can now create a LatLng Object for use with maps
            val latLng = LatLng(location.latitude, location.longitude)
        }
    
        private fun checkLocation(): Boolean {
            if (!isLocationEnabled)
                showAlert()
            return isLocationEnabled
        }
    
        private fun showAlert() {
            val dialog = AlertDialog.Builder(this)
            dialog.setTitle("Enable Location")
                    .setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to " + "use this app")
                    .setPositiveButton("Location Settings") { paramDialogInterface, paramInt ->
                        val myIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
                        startActivity(myIntent)
                    }
                    .setNegativeButton("Cancel") { paramDialogInterface, paramInt -> }
            dialog.show()
        }
    
        companion object {
    
            private val TAG = "MainActivity"
        }
    
    }
    

提交回复
热议问题