public class MapScreen erweitert FragmentActivity implementiert GoogleMap.OnInfoWindowClickListener, GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener, GoogleMap.OnMarkerClickListener, LocationNun habe ich versucht, andere Lösung den aktuellen Standort eines Benutzers zu erhalten, aber scheiterte
{
final int RQS_GooglePlayServices = 1;
GoogleMap mymap;
boolean markerClicked;
Marker marker;
LatLng latLng;
@Override
public void onBackPressed() {
startActivity(new Intent(getApplicationContext(), AfterSignUp.class));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_screen);
initializeMap();
/*//Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
// Status angezeigt if (Status! = ConnectionResult.SUCCESS) {// Google Play-Dienste nicht verfügbar sind
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();
}else {*/ // Google Play Services are available
FragmentManager myfragmentManager = getFragmentManager();
MapFragment mymapFragment = (MapFragment) myfragmentManager.findFragmentById(R.id.fragment);
//Getting reference to the SupportMapFragment of activity main
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
// Getting a reference to the map
mymap =mymapFragment.getMap();
//mymap = fm.getMap();
//Enabling my location
mymap.setMyLocationEnabled(true);
// Getting LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
onLocationChanged(location);
}
locationManager.requestLocationUpdates(provider, 20000, 0, this);
/*
mypos=new LatLng(latitude,longitude);
CameraUpdate cameraUpdate=CameraUpdateFactory.newLatLngZoom(mypos,20);
mymap.animateCamera(cameraUpdate);*/
mymap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
mymap.setOnMapClickListener(this);
mymap.setOnMarkerClickListener(this);
mymap.setOnMapLongClickListener(this);
mymap.setOnInfoWindowClickListener(this);
markerClicked = false;
mymap.getUiSettings().setMyLocationButtonEnabled(true);
MainDbAdapter mainDbAdapter = new MainDbAdapter(getApplicationContext());
Cursor location_cursor = mainDbAdapter.showLocations();
while (location_cursor.moveToNext()) {
String lati = location_cursor.getString(location_cursor.getColumnIndex(MainDbAdapter.DbAdapter.Lat));
String longi = location_cursor.getString(location_cursor.getColumnIndex(MainDbAdapter.DbAdapter.Lon));
double lat = Double.parseDouble(lati);
double lon = Double.parseDouble(longi);
latLng = new LatLng(lat, lon);
mymap.addMarker(new MarkerOptions().position(latLng).title("Click to add ")).showInfoWindow();
}
}
private void initializeMap()
{
if(mymap==null)
{
mymap=((MapFragment)getFragmentManager().findFragmentById(R.id.fragment)).getMap();
if(mymap==null)
{
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_map_screen, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onMapClick(LatLng victoria) {
mymap.animateCamera(CameraUpdateFactory.newLatLng(victoria));
markerClicked = false;
}
@Override
public void onMapLongClick(LatLng latLng) {
mymap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
String lat = String.valueOf(latLng.latitude);
String lon = String.valueOf(latLng.longitude);
marker = mymap.addMarker(new MarkerOptions().position(new LatLng(latLng.latitude, latLng.longitude)).visible(true).title("Click to Edit"));
MainDbAdapter mainDbAdapter = new MainDbAdapter(getApplicationContext());
long loc = mainDbAdapter.storeLocations(lat, lon);
if (loc > 0) {
Toast.makeText(getApplicationContext(), "Location Saved", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Location Save failed", Toast.LENGTH_LONG).show();
}
Intent intent = new Intent(getApplicationContext(), AfterInfoClick.class);
intent.putExtra("lat", lat);
intent.putExtra("lon", lon);
startActivity(intent);
}
});
}
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
@Override
public void onInfoWindowClick(Marker marker) {
mymap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
LatLng latLng1 = marker.getPosition();
String lat = String.valueOf(latLng1.latitude);
String lon = String.valueOf(latLng1.longitude);
Intent intent = new Intent(getApplicationContext(), OnInfoClick.class);
intent.putExtra("lat1", lat);
intent.putExtra("lon1", lon);
startActivity(intent);
}
});
}
@Override
public void onLocationChanged(Location location) {
double latitude=location.getLatitude();
double longitude=location.getLongitude();
LatLng mypos=new LatLng(latitude,longitude);
//Showing current location in google map
mymap.moveCamera(CameraUpdateFactory.newLatLng(mypos));
//Zoom in the google Map
mymap.animateCamera(CameraUpdateFactory.zoomTo(15));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
Was ist der Fehler? –
Verwenden Sie 'criteria.setAccuracy (Criteria.ACCURACY_FINE);' –