web-dev-qa-db-ja.com

仕組み-requestLocationUpdates()+ LocationRequest / Listener

私は新しいAndroidコーダーで、ローカライズの更新を要求するのに問題があります。

http://developer.Android.com/training/location/receive-location-updates.html のチュートリアルで作業しています。

私のアプリケーションは例外を処理し、緯度と経度を適切に取得でき、ジオコーダーは住所の表示を処理できます。しかし、私は一度だけ場所を尋ねます-または場所が変わるとき。時間間隔をやりたいです。今のところ、チュートリアルからコードの実装を開始しましたが、次のようになります。

public class MainActivity extends Activity implements 
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener {

private static final int MILLISECONDS_PER_SECOND = 1000;

public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
private static final long UPDATE_INTERVAL =
          MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;

private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
private static final long FASTEST_INTERVAL =
          MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;

private TextView tvStatus;
private TextView tvLatitude;
private TextView tvLongitude;

LocationRequest mLocationRequest;
LocationClient mLocationClient;
Location mCurrentLocation;

boolean bNetworkEnabled;
boolean bGPSEnabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    tvStatus = (TextView)findViewById(R.id.tvStatus);
    tvLatitude = (TextView)findViewById(R.id.tvLatitude);
    tvLongitude = (TextView)findViewById(R.id.tvLongitude);

    mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(UPDATE_INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationClient = new LocationClient(this, this, this);

    checkProviders();
}

そのため、既に間隔と場所の要求が実装されています。しかし、私がどこかで使うべきコメントがある前に私が与えたリンクにはrequestLocationUpdates()(おそらくonCreate()onStart()およびonStop()でのリクエストの削除)、しかし、私はそれに問題があります。だから、Eclipseは私に3つの方法を示しています:

requestLocationUpdates(LocationRequest request, LocationListener listener)
requestLocationUpdates(LocationRequest request, PendingIntent CallbackIntent)
requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper)

だから私が最初に思うのは、この場所で最も正しいと思う。 LocationListenerスロットに何を置くべきですか?私はそれがどのように機能するかについて少し説明して助けを求めます。

34
F1sher

アクティビティMainActivityにLocationListenerを実装しています。したがって、同時ロケーション更新の呼び出しは次のようになります。

mLocationClient.requestLocationUpdates(mLocationRequest, this);

実装するLocationListenerがgoogle apiからのものであることを確認してください。つまり、これをインポートします。

import com.google.Android.gms.location.LocationListener;

これではなく:

import Android.location.LocationListener;

そしてそれはうまく動作するはずです。

これを行う前に、LocationClientが実際に接続されていることも重要です。 onCreateメソッドまたはonStartメソッドではなく、onResumeで呼び出すことをお勧めします。これは、Google Location Apiのチュートリアルで非常によく説明されています。 https://developer.Android.com/training/location/index.html

36
HigiPha

私はこれを使用します:

LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

たとえば、1秒間隔を使用します。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);

時間はミリ秒単位、距離はメートル単位です。

これは自動的に呼び出します:

public void onLocationChanged(Location location) {
    //Code here, location.getAccuracy(), location.getLongitude() etc...
}

これらはスクリプトにも含まれていましたが、実際には使用しませんでした。

public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}

要するに:

public class GPSClass implements LocationListener {

    public void onLocationChanged(Location location) {
        // Called when a new location is found by the network location provider.
        Log.i("Message: ","Location changed, " + location.getAccuracy() + " , " + location.getLatitude()+ "," + location.getLongitude());
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}
    public void onProviderEnabled(String provider) {}
    public void onProviderDisabled(String provider) {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);
    }
}
10
Josttie