2016-07-15 4 views
4

は、ここに私が試したものです:Androidで正確かつ一貫して場所を模倣する方法は?

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    String provider = locationManager.getBestProvider(criteria, true); 
    locationManager.addTestProvider(provider, false, false, false, false, true, true, true, 0, Criteria.ACCURACY_FINE); 
    locationManager.setTestProviderEnabled(provider, true); 

    Handler handler = new Handler(); 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      Location location = new Location(provider); 
      location.setLatitude(...); 
      location.setLongitude(...); 
      location.setAccuracy(Criteria.ACCURACY_FINE); 
      location.setTime(System.currentTimeMillis()); 
      location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); 
      locationManager.setTestProviderLocation(provider, location); 

      handler.postDelayed(this, INTERVAL); 
     } 
    }; 

    handler.postDelayed(runnable, INTERVAL); 

問題は関係なく、私は間隔を設定する方法低い、ではない、Googleマップ上のマーカーは、嘲笑の場所にとどまるように見えることはできません。 Runnablerun()が再び呼び出されるまで、常に元の位置に戻ります。私は、私のループハンドラよりも場所を模索する正当な方法があると信じています。あなたはそれがこのプロバイダの現在位置を設定します

locationManager.setTestProviderLocation(provider, location); 

このラインを呼び出すと

+0

Googleマップアプリで嘲笑された場所を見たいですか? – Blackkara

+0

@Blackkaraいいえ、Googleマップ専用ではありません。私はちょうど私が正しく模倣された場所を設定したかどうかをテストするためにGoogleマップ上のマーカーを使用しています。 –

+1

尋ねる理由:Google Mapsアプリケーション自体の位置を嘲笑して見たい場合は、融合ロケーションプロバイダをモックする必要があります。とにかく、あなたのコードは正しいですが、あなたが更新を要求しているプロバイダを確認してください。テストプロバイダの名前が「XYXプロバイダ」の場合、** requestLocationUpdates( "XYX provider"、...); ** – Blackkara

答えて

0

、のは私のテストプロバイダが

String provider = "AbcProvider"; 
location.setProvider(provider); 
locationManager.setTestProviderLocation(provider, location); 
  • locationManager.getLastKnownLocation( "AbcProvider")AbcProviderであると仮定してみましょう。現在設定されている位置を返します。 requestLocationUpdates( "AbcProvider"、...);を呼び出した場合は、がonLocationChanged()が実行されます。

コードに問題はありません。しかし、あなたが嘲笑した結果をどこで見たいか明確にしてください。あなたのコードを実行した後、Googleマップアプリ自体を見れば、ロッキングはLocationManagerからの位置情報を取得していないため動作しません。

関連する問題