Как я могу получить текущее местоположение GPS? (не последний известный)

я пытаюсь получить местоположение пользователя, используя только поставщика GPS. я не хочу, чтобы мое приложение получало последнее известное местоположение или запрашивало обновления местоположения через определенный период времени или при изменении местоположения. есть ли способ, который может дать мне текущее местоположение при нажатии кнопки ??? ... я новичок, я пробовал LocationManager API из студии Android, и он возвращает местоположение, предоставленное сетью, в порядке, но не работает при использовании GPS. вот мой код:

 fun getlocation() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION), locationPermissionCode)
        }
        else
        {
            locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
           // val listener = locationListener()
            val gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
            val network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
            //if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N)
            if (gps || network) {
                if (network) {
                    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 5F, this)


        
                }
                if (gps) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 5F, this)
             
                }
            }
            else {
                val AlertDialog = AlertDialog.Builder(this)
                AlertDialog.setTitle("GPS is Disabled")
                AlertDialog.setMessage("Do you want enable GPS ?")
                AlertDialog.setPositiveButton("Yes") { dialougeInterface: DialogInterface, i: Int ->
                    val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
                    startActivity(intent)
                    dialougeInterface.dismiss()
                }
                AlertDialog.setNegativeButton("No") { dialouge: DialogInterface, i: Int ->
                    dialouge.dismiss()
                }
                AlertDialog.show()
            }
        }
    }

я добавил прослушиватель местоположения в родительский класс класса AddCustomer: AppCompatActivity(), LocationListener

в функции переопределения:

override fun onLocationChanged(location: Location) {
       locationx.text = location.latitude.toString() +" , "+ location.longitude.toString()
    }

Должен ли я использовать метод getcurrentlocation() из LocationManager?


person Asfir Ali    schedule 04.02.2021    source источник


Ответы (1)


Я не знаю, получаете ли вы свое последнее местоположение или нет. Вот ответ, когда вы вообще ничего не получаете от провайдера gps.

Сделав этот блок таким, вы получите свое местоположение только через GPS.

if (gps) {
                
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 5F, this)

}

Вышеупомянутое может вернуться, когда набор микросхем GPS вашего устройства чувствует, что он получает сигнал от GPS, поэтому, находясь внутри здания, он, вероятно, не получит никаких ответов. Выйдите на улицу и попробуйте.

В вашем случае, нажав кнопку, чтобы получить точное местоположение, в случае, если пользователь не может получить какой-либо сигнал, вы должны предоставить обратный вызов для тайм-аута.

 private val mHandler = Handler(Looper.getMainLooper())

 private val mTimeoutRunnable = Runnable {
    
     //stopLoading
     //Toast the user to try it somewhere else
 }


 fun askGsp() {

        mHandler.postDelayed(mTimeoutRunnable, 5 * 1000) //time out in 5 seconds
        
        //ask for gps update like the code above
        //...
        override fun onLocationChanged(location: Location) {

              mHandler.removeCallbacks(mTimeoutRunnable) //remove timeout action
               locationx.text = location.latitude.toString() +" , "+ 
               location.longitude.toString()
        }
 }
person March3April4    schedule 04.02.2021