AndroidアプリでGPS位置をモックしようとしています。Google FusedLocationApi.setMockLocationはonLocationChangedをトリガーしません
私が行います
- 使用com.google.android.gms:遊ぶ - サービス - 場所:
ALLOW_MOCK_LOCATIONS
、ACCESS_MOCK_LOCATION
、:9.4.0 - が登録GoogleApiClient
- は、すべての必要な権限を持っている持っているが
ACCESS_COARSE_LOCATION
、ACCESS_FINE_LOCATION
- は
- をするとき、実際の場所を受け取り、デバッグモードでは、実際のデバイス上でアプリケーションを実行します
private void registerLocationListener(){ if(isStarted&&googleApiClient.isConnected()) { LocationRequest request = new LocationRequest() .setInterval(1000) .setSmallestDisplacement(0.5f) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationServices.FusedLocationApi.requestLocationUpdates( googleApiClient, request, this); LocationServices.FusedLocationApi.getLastLocation(googleApiClient); } }
、私は次のようになり、同じ
GoogleApiClient
を共有する別のクラスがあります:このような場所の更新のための
マイレシーバ・クラス・レジスタを模擬しようとしていない
public class LocationMocker{
private final GoogleApiClient googleApiClient;
public LocationMocker(GoogleApiClient apiClient){
this.googleApiClient = apiClient;
}
private void start(){
LocationServices.FusedLocationApi.setMockMode(googleApiClient, true).setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
Log.e(TAG,"SUCCESS "+status);
new Thread(){
public void run(){
while(!this.isInterrupted()){
Thread.sleep(timeout);
LocationServices.FusedLocationApi.setMockLocation(googleApiClient, generateMockLocation())
.setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
Log.e(TAG,"NEW MOCKED LOCATION!");
}
@Override
public void onFailure(@NonNull Status status) {
Log.e(TAG,"FAILURE "+status);
}
});
}
}
}.start();
}
@Override
public void onFailure(@NonNull Status status) {
Log.e(TAG,"FAILURE "+status);
}
});
}
}
を
何が起こるかは、すべてが正しい方法を登録する(私はすべてのコールバックを記録する)、私は定期的に私の "新しいMOCKED LOCATION!"私のLocationListeners onLocationChanged(Location location)は決して呼び出されません。
私はまた別の注文を試みました(最初にlocationListenerを登録、最初にsetMockMode ...)。
私は間違っていると思いますか? 私がすでに言ったように、私が実際のGPSを使用すればすべて正常に動作します。
:
と
がこれを読みますメソッドを呼び出すと、 'LocationServices.FusedLocationApi.setMockLocation'が呼び出されます。ここで行うことは、位置情報を提供することです。その変更を聞くのではありません。 – simmerl