我想在一个项目中获取“我的当前位置”,但是它在6或7分钟后可以工作,如何更快地获取当前位置?
我将ACCESS_FINE_LOCATION
和ACCESS_COARSE_LOCATION
和INTERNET
放在了Android清单文件中,然后打开了设备位置信息,并检查了设置中的应用内权限。
这是我的代码
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener
{
private GoogleMap mMap;
String MarkerId1, MarkerId2;
Marker MarkerMaqsad;
int chk1 = -1, chk2 = -1;
LocationManager locationManager;
FloatingActionButton floatingActionButton;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
floatingActionButton = findViewById(R.id.fab);
floatingActionButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
if (CheckEnableGps())
{
Get_User_Current_Location();
}
else
{
Dialog_Enable_Provider dialog = new Dialog_Enable_Provider(MapsActivity.this);
dialog.show();
}
}
});
}
boolean CheckEnableGps()
{
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
boolean check = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (check)
{
return true;
}
else return false;
}
@Override
public void onMapReady(final GoogleMap googleMap)
{
mMap = googleMap;
final LatLng location = new LatLng(35.722840, 51.388394);
MarkerOptions markerOptionFirst = new MarkerOptions().position(location)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.lcbig));
final MarkerOptions markerOptionsSecound = new MarkerOptions().position(location)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.lc_maqbig));
final Marker markerStart = mMap.addMarker(markerOptionFirst);
MarkerId1 = markerStart.getId();
Move_Camera(location);
CircleOptions circleOptions = new CircleOptions();
circleOptions.center(location);
circleOptions.fillColor(Color.BLUE);
circleOptions.strokeColor(Color.BLUE);
circleOptions.radius(3.048);
mMap.addCircle(circleOptions);
mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener()
{
@Override
public void onCameraMove()
{
LatLng lng = googleMap.getCameraPosition().target;
if (chk1 != 0)
{
markerStart.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lcsmal));
markerStart.setPosition(lng);
} else
{
if (MarkerMaqsad != null && chk2 != 0)
{
MarkerMaqsad.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lc));
MarkerMaqsad.setPosition(lng);
}
}
}
});
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener()
{
@Override
public void onCameraIdle()
{
if (chk1 != 0)
{
markerStart.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lcbig));
} else
{
MarkerMaqsad.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lc_maqbig));
}
}
});
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
{
@Override
public boolean onMarkerClick(Marker marker)
{
if (marker.getId().equals(MarkerId1))
{
chk1 = 0;
MarkerMaqsad = mMap.addMarker(markerOptionsSecound);
MarkerMaqsad.setZIndex(1);
MarkerMaqsad.setPosition(marker.getPosition());
MarkerId2 = MarkerMaqsad.getId();
}
if (marker.getId().equals(MarkerId2))
{
chk2 = 0;
}
return true;
}
});
}
private void Move_Camera(LatLng location)
{
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location, 15f));
}
void Get_User_Current_Location()
{
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED)
{
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 5, this);
}
@Override
protected void onResume()
{
try
{
if (CheckEnableGps())
{
Get_User_Current_Location();
}
} catch (Exception e)
{
e.printStackTrace();
}
super.onResume();
}
@Override
public void onBackPressed()
{
if (chk2 == 0 || chk1 == 0)
{
chk1 = -1;
chk2 = -1;
MarkerMaqsad.remove();
} else
{
super.onBackPressed();
}
}
@Override
public void onLocationChanged(Location location)
{
LatLng lng = new LatLng(location.getLatitude(), location.getLongitude());
Move_Camera(lng);
}
@Override
public void onStatusChanged(String s, int I, Bundle bundle)
{
}
@Override
public void onProviderEnabled(String s)
{
}
@Override
public void onProviderDisabled(String s)
{
}
}
请帮助我