5

アプリをテストするためのデバイス(HTC HD Deside)は1つしかなく、GPSデータを取得したい場合は

locationManager.requestLocationUpdate(criteria,0,0,this); //critera = "gps"

GPSアイコンが通知バーに表示されますが、デバイスがGPSデータを探して取得していることを意味するかのように「点滅」します。したがって、私のアプリは、GPSからデータを取得するのに成功するまでに(約1分から3分!)(アイコンの停止が点滅する前に)非常に多くの「思考」時間を要します。

だから、私はこのようなwhile命令を作成する義務があります:

do{
    lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}while(System.currentTimeMillis() - lastLocation.getTime() > 5000);

そのおかげで、最近の場所を確実に取得できますが、時間がかかりすぎました。

どうしたの?それはハードウェアですか?これを修正するためのより良い方法を見つけることができますか?GPSデータを「すばやく」取得できますか?:/(1〜5秒)

4

4 に答える 4

3

ロケーション認識アプリを開発する前に、このhttp://developer.android.com/guide/topics/location/strategies.htmlガイドを読む必要があると思います。

GPSセンサーは修正を取得するのに1〜3分かかりますが、非常に迅速な修正(必要に応じて1〜5秒)を行うことはできません。

最後の既知の場所の値を使用して、場所の修正の要求を開始する必要があります。持っている場合は、それに応じてコンテンツを更新します。

于 2013-03-10T23:35:46.153 に答える
1

建物内や屋根付きのエリアにいる場合、GPSセンサーに時間がかかる場合があります。建物の中にいてGPS信号が利用できない場合は、常に点滅してバッテリーを大量に消費します。他のプロバイダーを利用してみてください。

于 2013-03-11T03:43:00.960 に答える
0

データネットワークに接続していますか?

HTCについてはわかりませんが、通常、データ接続が利用可能な場合、デバイスはアシストGPSと呼ばれるものを使用します。地平線上ですべての可視衛星をスキャンする代わりに、衛星エフェメリスがサーバーからダウンロードされ、修正を取得するのにかかる時間は10〜20秒です。

また、屋内や信号の少ないエリアにいる可能性もあります。また、アンテナが不良である可能性もあります。

市場のGPSテストアプリケーションを使用して、アンテナに問題があるかどうかを確認します(2つのデバイスを比較して)。

于 2013-03-12T07:52:25.497 に答える
0

GPSプロバイダーは、バッテリーのエネルギーを大量に消費することがあり、GPS信号を取得し、ハードウェアをウォームアップしてから位置を取得する必要があります。初めて使用する場合は、時間がかかることがあります。

私がお勧めするのは、必要に応じて位置情報を取得するためにGPSまたはネットワークのいずれかを選択する新しいLocationRequestを使用することです。

onCreateの最初のロケーションリクエストを設定します

private fun setupLocationRequest(){
        locationCallback = LocationCallback()
        locationRequest = LocationRequest.create()
        locationRequest.interval = 10000
        locationRequest.fastestInterval = 2000
        locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
    }

ご覧PRIORITY_BALANCED_POWER_ACCURACYのとおり、緯度と経度の最大距離のブロックが表示され、GPSだけでなく、必要に応じてネットワークも使用されます。

次に、最初にリクエストしlastKnowLocationます。この場所が取得されない場合は、場所の更新をリクエストできます

fusedLocationClient.lastLocation.addOnSuccessListener { lastLocation ->
                if(lastLocation != null){
                    calculateDistanceAndNavigate(lat,lng,lastLocation.latitude,lastLocation.longitude,radio)
                }else{
                    startLocationUpdates()
                    locationCallback = object : LocationCallback() {
                        override fun onLocationResult(locationResult: LocationResult?) {
                            locationResult ?: return
                            for (location in locationResult.locations) {
                                calculateDistanceAndNavigate(lat,lng,location.latitude,location.longitude,radio)
                            }
                        }
                    }
                }
            }

  private fun startLocationUpdates() {
        fusedLocationClient.requestLocationUpdates(
            locationRequest,
            locationCallback,
            Looper.getMainLooper()
        )
    }

私にとって、これは位置を取得するための最も効率的な方法です。最初はGPSだけを使用するのではなく、代わりにバッテリーを節約し、必要に応じてNETWORKまたはWIFIも使用します。次に、保存されている場合はlastKnownLocationを要求します(別のアプリなどによって)。グーグルマップ)そしてそれが失敗した場合、私はちょうど場所の更新を要求し始めます(それは少しかかるかもしれません)

于 2020-05-11T16:11:23.683 に答える