Местоположение Android будет предоставлять временные метки в будущем, или я глуп? Попробуйте самиAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Местоположение Android будет предоставлять временные метки в будущем, или я глуп? Попробуйте сами

Сообщение Гость »

Я пишу приложение для пробежек и интегрирую пройденное расстояние по GPS. Это работает очень хорошо. Я добавил различные настраиваемые фильтры и экспериментирую с методами минимизации джиттера и других ошибок, особенно на скорости ходьбы. Одно из предложений, которое я прочитал, заключалось в том, чтобы отказаться от «старых» исправлений при запуске, поэтому я реализовал возрастной фильтр, основанный на сравнении возвращаемого location.time с текущим моментом. Моя проблема в том, что я вижу отрицательный возраст, что означает, что временная метка местоположения находится в будущем !!!
Открыл ли я машину времени?Вот самая короткая полная демонстрационная программа, которую я мог написать для демонстрации своей машины времени.
Действия

Код: Выделить всё

package com.example.locationagedemo

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Looper
import android.util.Log
import android.widget.TextView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import java.util.Calendar

class MainActivity : AppCompatActivity() {

private lateinit var locationManager: LocationManager
private lateinit var locationListener : LocationListener
private lateinit var ageTextView: TextView

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

ageTextView = findViewById(R.id.ageTextView)

locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager

nowListen()
}

fun nowListen() {
if (ContextCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {

locationListener = object : LocationListener {

override fun onLocationChanged(location: Location) {
var locationAge = Calendar.getInstance().timeInMillis - location.time
ageTextView.setText(String.format("Location Age %d ms", locationAge))
}

@Deprecated("Deprecated in Java")
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
}

override fun onProviderEnabled(provider: String) {}
override fun onProviderDisabled(provider: String) {}
}
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
2000L, 0.0F, locationListener, Looper.getMainLooper()
)

} else
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1234
)
}

override fun onRequestPermissionsResult( requestCode: Int, permissions: Array,
grantResults: IntArray
) {
nowListen()
super.onRequestPermissionsResult(requestCode, permissions,     grantResults)
}
}
Макет Манифест Программа сравнивает Calendar.timeInMillis и Location.time, которые определены в документации как время эпохи Unix в формате UTC, а также в документации по местоположению указано: «Все местоположения, созданные с помощью LocationManager, гарантированно имеют действительные широта, долгота, метка времени"
Итак, для всех вас, Гуру Android GPS, мы здесь: -
Либо
а) Я обнаружил машина времени
b) Я действительно глуп и упускаю что-то очевидное (не первый раз Ха-ха-ха!)
c) В чем-то есть ошибка, которую я не вижу
d ) Что-то еще?
Что это???
Для всех остальных, пожалуйста, запустите это на своем реальном телефоне и сообщите мне модель телефона и если вы получите +ve или -ve возраста. Может, это всего лишь два моих Мото?

Подробнее здесь: https://stackoverflow.com/questions/781 ... d-try-it-f
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»