How to get information about the satellites from android?

后端 未结 3 508
粉色の甜心
粉色の甜心 2021-02-10 21:12


I am trying to get the satellite information from the android and wrote this following code which is not giving any results, could any one point out why is it so?

3条回答
  •  粉色の甜心
    2021-02-10 21:35

    GpsStatus.Listener is deprecated. You should use LocationListener and GnssStatus.Callback instead. Here following code:

    import android.content.Context.LOCATION_SERVICE
    import android.content.pm.PackageManager
    import android.location.GnssStatus
    import android.location.Location
    import android.location.LocationListener
    import android.location.LocationManager
    ...
    
    class YourFragment : LocationListener {
        
        private var mGnssStatusCallback : GnssStatus.Callback? = null
        private lateinit var mLocationManager: LocationManager
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
            mLocationManager = requireActivity().getSystemService(LOCATION_SERVICE) as LocationManager
    
            mGnssStatusCallback = object : GnssStatus.Callback() {
                override fun onStarted() {
                    Log.e(TAG, "GnssStatus.Callback onStarted")
                    super.onStarted()
                }
    
                override fun onSatelliteStatusChanged(status: GnssStatus?) {
                    Log.e(TAG, "GnssStatus.Callback Status: ${status?.toString()}")
                    super.onSatelliteStatusChanged(status)
                }
    
                override fun onStopped() {
                    Log.e(TAG, "GnssStatus.Callback onStopped")
                    super.onStopped()
                }
    
                override fun onFirstFix(ttffMillis: Int) {
                    Log.e(TAG, "GnssStatus.Callback onFirstFix $ttffMillis")
                    super.onFirstFix(ttffMillis)
                }
            }
    
            if (ActivityCompat.checkSelfPermission(
                    requireContext(),
                    Manifest.permission.ACCESS_FINE_LOCATION
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                return
            }
    
            mGnssStatusCallback?.let {
                mLocationManager.registerGnssStatusCallback(it)
                mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0F, this)
            }
    
        }
    
        override fun onDestroyView() {
            mLocationManager.removeUpdates(this)
            mGnssStatusCallback?.let {
                mLocationManager.unregisterGnssStatusCallback(it)
            }
    
            super.onDestroyView()
        }
    
        override fun onLocationChanged(location: Location?) {
            Log.e(TAG, "onLocationChanged new Location: ${location.toString()}")
        }
    
        override fun onStatusChanged(p0: String?, p1: Int, p2: Bundle?) {
            Log.e(TAG, "onStatusChanged p0 ${p0 ?: "null"} - p1 ${p1}")
        }
    
        override fun onProviderEnabled(p0: String?) {
            Log.e(TAG, "onProviderEnabled p0 ${p0 ?: "null"}")
        }
    
        override fun onProviderDisabled(p0: String?) {
            Log.e(TAG, "onProviderDisabled p0 ${p0 ?: "null"}")
        }
    
    }
    

    Note: I have observed that the GnssCallback may arrive in some minutes after you request for Location update.

提交回复
热议问题