onLocationChanged () занимает слишком много времени для вызова - PullRequest
0 голосов
/ 24 февраля 2019

В физическом устройстве вызов занимает слишком много времени.Но в AVD он работает отлично.Я тестирую этот код в Redmi Note 4 и Zuk Z2 Plus.Расположение обоих устройств установлено на HIGH_ACCURACY.Я хочу быстро найти это место.Но это занимает слишком много времени, чтобы выполнить.

 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0f,wcLoactionListener)
 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0f,wcLoactionListener)

Но если я удалил эту строку

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0f,wcLoactionListener)

, то onLocationChanged () не вызывает.

Вот мой слушатель местоположения

class MyListener:LocationListener {



    override fun onLocationChanged(location: Location?) {

        Log.d("Loc","*************************************************** "+ location)
    }

    override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {

    }

    override fun onProviderEnabled(provider: String?) {

    }


    override fun onProviderDisabled(provider: String?) {

    }
}

Основная активность: -

class MainActivity : AppCompatActivity() {
    val LOCATION_CODE = 212
    private lateinit var locationManager: LocationManager
    private lateinit var cwcLoactionListener:MyListener
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        cwcLoactionListener = MyListener()
        checkLocationPermission()
    }

    @SuppressLint("MissingPermission")
    fun fechLOc(){
        locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0f,cwcLoactionListener)
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,500,0f,cwcLoactionListener)
    }

    private fun checkLocationPermission() {
        if(Build.VERSION.SDK_INT>=23){

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED ){

                requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), LOCATION_CODE)
                return
            }
        }
        fechLOc()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

        when (requestCode) {
            LOCATION_CODE->{
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this,"Accept this permission", Toast.LENGTH_LONG).show()
                }else{
                    fechLOc()
                }
            }
            else ->{
                super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            }

        }


    }
}

манифест

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...