3

座標のリスト間でループを実行して GPS 位置をモックするサービスがありますが、メソッド onLocationChanged() は GPS の最初のモックのみを検出します。つまり、1 つの GPS プログラムを起動すると、サービスの最初の呼び出しのみが検出され、それがリストの最初の場所であるか最後の場所であるかは気にせず、最初の呼び出しを検出するだけです。

トーストメッセージを使用しているため、サービスの座標を変更するための呼び出しを行っていると確信していますが、機能しません..

ミコード。まず、LocationManager をセットアップします

ls = new MyLocationListener();

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.addTestProvider(Context.LOCATION_SERVICE, false, false,
        false, false, true, true, true, 0, 5);
lm.requestLocationUpdates(Context.LOCATION_SERVICE, 0, 0, ls);
lm.setTestProviderEnabled(Context.LOCATION_SERVICE, true);

MyLocationListener には、メソッド onLocationChanged() に表示メッセージしかありません。次に、タイマーを使用して、GPS をモックする関数を定期的に呼び出します。

private void setMockLocation(double latitude, double longitude, float accuracy) {

        Location newLocation = new Location(Context.LOCATION_SERVICE);

        newLocation.setLatitude(latitude);
        newLocation.setLongitude(longitude);
        newLocation.setAccuracy(accuracy);
        newLocation.setTime(System.currentTimeMillis());

        lm.setTestProviderEnabled(mocLocationProvider, true);

        lm.setTestProviderStatus(Context.LOCATION_SERVICE,
                                 LocationProvider.AVAILABLE,
                                 null,System.currentTimeMillis());    


        lm.setTestProviderLocation(Context.LOCATION_SERVICE, newLocation);      
}

ただし、最初に呼び出されたときにのみ機能し、次の呼び出しでは機能しません。

編集

いくつかの調査作業の後、コードが 2.2 および 4.2 で機能することがわかりました。作業に必要なデバイスを搭載したバージョンは 4.0 です。理由はわかりませんが、そのバージョンでは動作しません。何か案は?

4

1 に答える 1

1

これに答えるのは遅いですが、将来誰かが同じバグを抱えている場合、ここで私はこれをどのように解決しましたか.

私は同じ問題を抱えていましたが、「setElapsedRealtimeNanos」を設定した後、うまくいきました。

newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
于 2014-05-11T15:28:25.837 に答える