#android #android-studio #gps #locationmanager #currentlocation
#Android #android-studio #gps #locationmanager #текущее местоположение
Вопрос:
я пытаюсь получить местоположение пользователя, используя только поставщика GPS. я не хочу, чтобы мое приложение получало последнее известное местоположение или запрашивало обновления местоположения через определенный период времени или когда местоположение changed.is есть какой-нибудь способ, который может дать мне текущее местоположение при нажатии кнопки ???… я новичок, я попробовал LocationManager API из android studio, и он возвращает местоположение, предоставленное сетью, нормально, но не работает при использовании GPS. вот мой код :
fun getlocation() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp;
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()
}
}
}
я добавил прослушиватель местоположения в родительский класс » class AddCustomer: AppCompatActivity() , LocationListener »
в функции переопределения :
override fun onLocationChanged(location: Location) {
locationx.text = location.latitude.toString() " , " location.longitude.toString()
}
должен ли я использовать метод «getcurrentlocation ()» из «LocationManager»?
Ответ №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()
}
}