こんにちは私はユーザーの場所を取得するアンドロイドマップアプリケーションを作成していますが、ユーザーがマップを開いたときに場所が正確でなく、getAccuracy()が100よりも低いときにハンドラを停止する方法
私はこれを試しました。しかし、それはまだハンドラを呼び出し、TOASTSは停止しません。
private LocationManager locationManager;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps_page);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
handler.postDelayed(runnable,3000);
}
@Override
public void onProviderDisabled(String provider) {
handler.removeCallbacks(runnable);
}
});
private Runnable runnable = new Runnable() {
@Override
public void run() {
getCurrentLocation();
Toast.makeText(mapsPage.this, "GETTING LOCATION", Toast.LENGTH_SHORT).show();
handler.postDelayed(this, 3000);
}
};
private void getCurrentLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
if (location != null) {
longitude = location.getLongitude();
latitude = location.getLatitude();
moveMap();
Integer loc = Math.round(location.getAccuracy());
textings.setText(Integer.toString(loc));
if(loc <= 100)
{
handler.removeCallbacks(runnable);
Toast.makeText(mapsPage.this, "HANDLER STOPPED", Toast.LENGTH_SHORT).show();
}
}
}
//Function to move the map
private void moveMap() {
LatLng latLng = new LatLng(latitude, longitude);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(17));
mMap.addMarker(new MarkerOptions().position(latLng).draggable(false));
}
私は、ユーザーの位置を確認し、5秒ごとに実行され、getAccuracyデータが100よりも同等以下のいずれかであるとき、それは停止しますハンドラを追加しました。どうすればいい?
こんにちは、私はこれですべてのナイターを引っ張って、私は答えを見つけました。私はtimerTaskを使用し、スナックバーでトーストを置き換え、それは本当にうまくいった。私はあなたのコードを試して、それは動作し、あなたはupvoteと受け入れられた答えに値する。助けと説明のために再びありがとう! :D –
しかし、私は先生に尋ねるかもしれません、ユーザーの位置を効率的に特定するための私のコードやアプローチですか、それとも他の方法を検討する必要がありますか? –