0
私のプロジェクトの現在位置を取得するグローバルクラスを作成します。ユーザーがアクティビティのボタンを押すたびにLocationを取得しています。デバイスがオンであっても2000年以上の精度を与える融合位置
public class Get_Current_Location implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
GoogleApiClient apiClient;
Location CurrentLocation;
LocationRequest locationRequest;
Context context;
Interface_For_Location getLocation;
String TAG = "###Current Location###";
public Get_Current_Location(Context context,Interface_For_Location location) {
this.context = context;
this.getLocation=location;
apiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
Log.d(TAG, "Google API BUILD Successfully " + apiClient);
apiClient.connect();
setLocationRequest();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.d(TAG,"On Connected Calling");
startLocationUpdate();
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG,"On Location Changed Calling ");
Log.d(TAG,"Updated Location OnLocationChnaged "+location);
CurrentLocation=location;
getLocation.currentLoc(CurrentLocation);
stopLocationUpdates();
}
public void startLocationUpdate() {
Log.d(TAG,"Start Location Update Calling ");
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, this);
}
private void stopLocationUpdates(){
LocationServices.FusedLocationApi.removeLocationUpdates(apiClient,this);
}
private void setLocationRequest(){
Log.d(TAG,"Set Location Update Request Calling");
locationRequest=new LocationRequest();
locationRequest.setInterval(10*60*1000);
locationRequest.setFastestInterval(10*60*1000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setNumUpdates(1);
}
}
私は呼び出し元クラスのインターフェイス経由で取得しています。私は50メートルの下に2つのデバイスの距離を表示する必要がありますが、私はお互いの隣にあるデバイスの場所を取得しようとすると、両方とも2000以上の精度を生成します。この低い精度レベルで私は隣にあるデバイスを検出することはできませんお互い。
私はこの精度を100以下にするように案内していますので、59メートル以下のデバイスを検出できます。
これは、呼び出し元のelseステートメントです。 Y私に高精度とNexusデバイスを与えるSamsungデバイスは、私に希望の精度を与えます – androidXP
この場合、タイムアウトを追加してください。正確なポイントを得ることは必ずしも可能ではありません。例えば、公園の外では望みの精度を得るべきですが、大きな建物のトンネルや中心部で500m以下のものがあれば驚くでしょう。 –