I am try to showing current location using android google map api 2, I run this on my phone which is wifi enable.
But it always shows Longitude and Latitude 0.0 , 0.0 .
Here is my code
package com.google.map;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.map.R;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.FragmentManager;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity implements LocationListener{
private GoogleMap googlemap;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isGooglePlay())
{
setContentView(R.layout.activity_main);
setUpMap();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId() == R.id.action_legalnotices)
{
startActivity(new Intent(this, LegalNoticesActivity.class));
}
return super.onOptionsItemSelected(item);
}
private boolean isGooglePlay()
{
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
if(status == ConnectionResult.SUCCESS)
{
return true;
}
else
{
((Dialog)GooglePlayServicesUtil.getErrorDialog(status, this, 10)).show();
Toast.makeText(getApplicationContext(), "Google play is not available.", Toast.LENGTH_LONG).show();
}
return false;
}
#SuppressLint("NewApi") private void setUpMap()
{
if(googlemap == null)
{
googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
if(googlemap != null)
{
// map code
googlemap.setMyLocationEnabled(true);
googlemap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
LocationManager lo = (LocationManager) getSystemService(LOCATION_SERVICE);
String provider = lo.getBestProvider(new Criteria(),true);
if(provider == null)
{
onProviderDisabled(provider);
}
else
{
onProviderEnabled(provider);
}
Location loc = lo.getLastKnownLocation(provider);
if(loc != null)
{
onLocationChanged(loc);
}
googlemap.setOnMapLongClickListener(onLongClickMapSettings());
}
}
}
private OnMapLongClickListener onLongClickMapSettings() {
// TODO Auto-generated method stub
return new OnMapLongClickListener() {
#Override
public void onMapLongClick(LatLng arg0) {
// TODO Auto-generated method stub
Log.i(arg0.toString(),"Long Click");
}
};
}
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
LatLng latlng = new LatLng(location.getLatitude(),location.getLongitude());
googlemap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
googlemap.moveCamera(CameraUpdateFactory.zoomTo(5));
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
Location lo = new Location(provider);
LatLng latlng = new LatLng(lo.getLatitude(),lo.getLongitude());
Log.i(latlng.toString(),"Current Location" );
googlemap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 5));
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
Here is the Log cat value of my android application.
05-07 22:16:31.636: I/lat/lng: (0.0,0.0)(17967): Current Location
Move your Log.i(latlng.toString(),"Current Location" ); code to the onLocationChanged-method, you don't have a location yet in onProviderEnabled.
mMap.setMyLocationEnabled(true); // just add one line it wil work.
Related
I want to make multiple polyline in map. i have one polyline in maps, then i want to make new polyline again. but the line is always connect with previous polyline. what should i do, this is my code:
package com.evy;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;
public class Tambah extends FragmentActivity implements LocationListener{
GoogleMap map;
LocationManager lm;
boolean isNewPoly=false;
PolylineOptions polyline;
ArrayList<LatLng> poly = new ArrayList<LatLng>();
ArrayList<LatLng> points = new ArrayList<LatLng>();
PolylineOptions polylineOptions;
#Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tambah);
//points=new ArrayList<LatLng>();
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.maptambah);
map=mapFragment.getMap();
final LocationListener ll=new LocationListener(){
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
map.addMarker(new MarkerOptions().position(new LatLng(location.getLatitude(),location.getLongitude())).title("posisi anda").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),location.getLongitude()), 15.0f));
}
#Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
#Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
Button stop = (Button) findViewById(R.id.stop);
Button start = (Button) findViewById(R.id.start);
map.setOnMapClickListener(new OnMapClickListener(){
#Override
public void onMapClick(LatLng point) {
// TODO Auto-generated method stub
if(isNewPoly==true){
MarkerOptions markerOptions = new MarkerOptions().position(point).title("Position").snippet("Latitude: "+point.latitude+" , "+"Longitude: "+point.longitude).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
map.addMarker(markerOptions);
polylineOptions = new PolylineOptions().color(Color.BLUE).width(3);
points.add(point);
for(int i=0;i<points.size();i++){
polylineOptions.add(points.get(i));
}
map.addPolyline(polylineOptions);
}
for(int i=0;i<points.size();i++){
poly.add(points.get(i));
}
}
});
start.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
isNewPoly=true;
}
});
stop.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
isNewPoly=false;
}
});
}
public static String encode(final List<LatLng> path){
long lastLat = 0;
long lastLng = 0;
final StringBuffer result = new StringBuffer();
for(final LatLng point:path){
long lat = Math.round(point.latitude * 1e5);
long lng = Math.round(point.longitude * 1e5);
long dlat = lat - lastLat;
long dlng = lng - lastLng;
encoded(dlat, result);
encoded(dlng, result);
lastLat = lat;
lastLng = lng;
}
return result.toString();
}
private static void encoded(long v, StringBuffer result){
v = v < 0 ? ~(v<<1) : v<<1;
while(v >= 0x20){
result.append(Character.toChars((int) ((0x20 | (v & 0x1f))+63)));
v >>= 5;
}
result.append(Character.toChars((int) (v + 63)));
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.tambah, 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.
switch(item.getItemId()){
case R.id.home:
this.finish();
startActivity(new Intent(Tambah.this, Peta.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
if I press button start, it make new polyline, and press button stop to stop it, but it's not work. the button stop not warking.
You are currently append all points at once, instead you should use a PolyLine array. Assuming that coordinates1 and coordinates2 are the LatLng[] type of arrays that is previously appended from KML file or some other source. You should write something like below;
int size=3 //determine the size of array.
Polyline[] polyLine;
polyLine = new Polyline[size];
int i =0;
while (i<size)
{
polyLine[i] = map.addPolyline(new PolylineOptions()
.clickable(true)
.add(coordinates1[i],coordinates1[i+1]));
i++;
}
List<LatLng> latLngList = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
latLngList.add(i, new LatLng(arrayList.get(i).getLocation_lat(), arrayList.get(i).getLocation_lang()));
}
Polyline polyline = googleMaps.addPolyline(new PolylineOptions()
.clickable(true)
.addAll(latLngList)
.width(2).color(Color.BLUE).geodesic(true));
List<LatLng> latLngList = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
latLngList.add(i, new LatLng(arrayList.get(i).getLocation_lat(), arrayList.get(i).getLocation_lang()));
}
Polyline polyline = mMap.addPolyline(new PolylineOptions()
.clickable(true)
.addAll(latLngList)
.width(2).color(Color.BLUE).geodesic(true));
I have a map named MapActivity which operated from
activity.MapActivity extends from fragment.Map loaded first time
successfully.When i am going for other fragment from activity.After
this when i pressed back button for map,map is showing blank
screen.Any idea?
MapActivity
package com.example.map;
import updatedata.FindMapDataService;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMyLocationChangeListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class MapActivity extends Fragment implements OnMyLocationChangeListener {
public GoogleMap gmap;
public static double maillat,maillng,latitude,longitude,elat5,elng5;
public static String flat5,flng5;
public static int s,state,check;
public static long utime,ftime;
View view;
public static Runnable runn;
public static Handler handler;
public boolean wifi,gps,network,val,inter;
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
// location data find from MainActivitiy
elat5=MainActivity.lat10;
elng5=MainActivity.lng10;
// location data find from LocationFindactivity
flat5=LocationFindActivity.latt;
flng5=LocationFindActivity.lng;
// find status for opening map
s=MainActivity.status;
// find time for handler
if(ftime == 0){
ftime=15000;
}
// Load Preferences
LoadPreferences();
//get view
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
}
try{
view = inflater.inflate(R.layout.map, container, false);
}catch(InflateException e){
e.printStackTrace();
}
//Check location data source
if(s==1){
initializemailmap();
check=1;
Log.e("Activity","link");
}else if(s==2){
elat5=Double.parseDouble(flat5);
elng5=Double.parseDouble(flng5);
check=1;
initializemailmap();
Log.e("Activity","Find");
}else{
initializemap();
check=0;
Log.e("Activity","Normal");
}
if( check == 1){
getActivity().startService(new Intent(getActivity(),FindMapDataService.class));
handler = new Handler();
handler.postDelayed(runn, 10000);
}
runn = new Runnable() {
#Override
public void run() {
flat5=FindMapDataService.latt;
flng5=FindMapDataService.lng;
if(flat5 != null && flng5 != null){
elat5=Double.parseDouble(flat5);
elng5=Double.parseDouble(flng5);
createMailMap();
}
// createMailMap();
handler.postDelayed(this, ftime);
}
};
// Show current location
gmap.setMyLocationEnabled(true);
if(check == 0){
LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
double glat = location.getLatitude();
double glng = location.getLongitude();
CameraUpdate myLoc = CameraUpdateFactory.newCameraPosition(
new CameraPosition.Builder().target(new LatLng(glat,glng)).zoom(12).build());
gmap.moveCamera(myLoc);
}
return view;
}
public void onMyLocationChange(Location arg0) {
// TODO Auto-generated method stub
double lat=arg0.getLatitude();
double lng=arg0.getLongitude();
CameraUpdate myLoc = CameraUpdateFactory.newCameraPosition(
new CameraPosition.Builder().target(new LatLng(lat,lng)).zoom(15).build());
gmap.moveCamera(myLoc);
gmap.setOnMyLocationChangeListener(null);
}
//after mail initialisation
private void initializemailmap() {
// TODO Auto-generated method stub
if(gmap == null){
Fragment ft=getFragmentManager().findFragmentById(R.id.mymap);
gmap=((SupportMapFragment) ft).getMap();
createMailMap();
} else{
createMailMap();
Log.e("Find","Create Mail Map");
}
}
//Normal initialisation
private void initializemap() {
// TODO Auto-generated method stub
if(gmap == null){
Fragment ft1=getFragmentManager().findFragmentById(R.id.mymap);
gmap=((SupportMapFragment) ft1).getMap();
}
if (gmap == null) {
Toast.makeText(getActivity(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
private void createMailMap() {
// TODO Auto-generated method stub
maillat=elat5;
// Log.e("latBrowser", Double.toString(latitude));
maillng=elng5;
// Create a LatLng object for the current location
LatLng latLng = new LatLng(maillat, maillng);
// Show the current location in Google Map
gmap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
//Set zooming control on goole to view location
gmap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12));
//Add marker at current position
MarkerOptions marker=new MarkerOptions();
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.arr));
//marker.position(latLng).anchor(1,1).rotation(90);
gmap.addMarker(marker.position(new LatLng(maillat, maillng)).title("You are here!"));
//Remove default marker
// gmap.clear();
}
//save preferences
private void SavePreferences(){
SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE );
SharedPreferences.Editor editor = sharedPreferences.edit();
// editor.putInt("val", state);
editor.putLong("time", utime);
editor.commit();
}
//load preferences
private void LoadPreferences(){
SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
// mapstatus = sharedPreferences.getInt("val",1);
ftime=sharedPreferences.getLong("time", 1);
}
public void onResume(){
super.onResume();
}
public void onStop(){
super.onStop();
SavePreferences();
gmap = null;
}
public void onDestroyView() {
super.onDestroyView();
Fragment f = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.mymap);
if (f != null){
getFragmentManager().beginTransaction().remove(f).commitAllowingStateLoss();
}
}
public void onDestroy(){
super.onDestroy();
MainActivity.status=0;
if(check == 1){
getActivity().stopService(new Intent(getActivity(),FindMapDataService.class));
}
SavePreferences();
}
}
you need to destroy map when you are using map inside Fragment
public void onDestroy(){
gmap = null;
super.onDestroy();
MainActivity.status=0;
if(check == 1){
getActivity().stopService(new Intent(getActivity(),FindMapDataService.class));
}
SavePreferences();
}
also update in OnCreateView method
...
//Check location data source
initializemailmap();
if(s==1){
check=1;
Log.e("Activity","link");
}else if(s==2){
elat5=Double.parseDouble(flat5);
elng5=Double.parseDouble(flng5);
check=1;
initializemailmap();
Log.e("Activity","Find");
}else{
initializemap();
check=0;
Log.e("Activity","Normal");
}
...
this code from your OnCreateView menthod
i hope it helps.
In my case I changed getFragmentManager().beginTransaction() with getChildFragmentManager().beginTransaction() and everything works fine now.
I researched for this Nullpointer Exception. After googling i found most of them were due to null references to the UI elements. But mine does not have any. I just can't get the reason for the null pointer. I directly tested it on my android phone running 2.3.7. And yes, i added the permissions in the manifest file.
package com.GodTM.projectshoppers;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
public class HomeActivity extends Activity {
private ImageButton get;
private ImageView quit,settings;
private LocationManager locMan;
public LocationListener LocLis;
public Location currLoc;
private double[] passloc;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
get=(ImageButton)findViewById(R.id.homeGetButton);
settings = (ImageView)findViewById(R.id.homeSettingsButton);
quit = (ImageView)findViewById(R.id.homeExitButton);
Criteria crit=new Criteria();
locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
LocLis = new LocationListener() {
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(location != null){
currLoc.setLatitude(location.getLatitude());
currLoc.setLongitude(location.getLongitude());
}
}
};
//Criteria crit = new Criteria();
if(currLoc !=null){
passloc[0] = currLoc.getLatitude();
passloc[1] = currLoc.getLongitude();
Toast.makeText(getApplicationContext(), "Lat:" + currLoc.getLatitude() + "\nLong:" + currLoc.getLongitude(), Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "Not Available", Toast.LENGTH_SHORT).show();
}
get.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(currLoc!=null){
Intent i = new Intent(HomeActivity.this, Screen2.class);
i.putExtra("Loc", passloc);
startActivity(i);
}
else{
Toast.makeText(getApplicationContext(), "Location Not Available", Toast.LENGTH_SHORT).show();
}
}
});
settings.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Intent j = new Intent(this, screen4.class);
// startActivity(j);
}
});
quit.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}
#Override
public void onResume(){
super.onResume();
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER , 0, 0, LocLis);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
}
currLoc is never initalized. Since location and currLoc are both Location you can change
if(location != null){
currLoc.setLatitude(location.getLatitude());
currLoc.setLongitude(location.getLongitude());
}
with
currLoc = location;
You didn't initialize passLoc. And you call getLastKnownLocation without saving the location itself.
I'm using the following code to create a map and attach a marker to it. I'm also adding a marker listener where I need to get the longitude and latitude of the marker position after dragging.
What it does is returnning my current location not the location of the marker after drag.
Any help with this part?!
package com.example.mysample;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.Projection;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.maps.GeoPoint;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.Toast;
import android.graphics.*;
public class MainActivity extends FragmentActivity implements LocationListener {
GoogleMap map;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GooglePlayServicesUtil
.isGooglePlayServicesAvailable(getApplicationContext());
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();
map.setMyLocationEnabled(true);
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker")
.draggable(true)
.snippet("Hello")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));
map.setOnMarkerDragListener(new OnMarkerDragListener() {
#Override
public void onMarkerDragStart(Marker marker) {
// TODO Auto-generated method stub
// Here your code
Toast.makeText(MainActivity.this, "Dragging Start",
Toast.LENGTH_SHORT).show();
}
#Override
public void onMarkerDragEnd(Marker marker) {
// TODO Auto-generated method stub
Toast.makeText(
MainActivity.this,
"Lat " + map.getMyLocation().getLatitude() + " "
+ "Long " + map.getMyLocation().getLongitude(),
Toast.LENGTH_LONG).show();
System.out.println("yalla b2a "
+ map.getMyLocation().getLatitude());
}
#Override
public void onMarkerDrag(Marker marker) {
// TODO Auto-generated method stub
// Toast.makeText(MainActivity.this, "Dragging",
// Toast.LENGTH_SHORT).show();
System.out.println("Draagging");
}
});
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(map)) {
// handle click here
// map.getMyLocation();
System.out.println("Clicked");
double lat = map.getMyLocation().getLatitude();
System.out.println("Lat" + lat);
Toast.makeText(MainActivity.this,
"Current location " + map.getMyLocation().getLatitude(),
Toast.LENGTH_SHORT).show();
}
return true;
}
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
Take a look at this function in your code.
#Override
public void onMarkerDragEnd(Marker marker) {
// TODO Auto-generated method stub
Toast.makeText(
MainActivity.this,
"Lat " + map.getMyLocation().getLatitude() + " "
+ "Long " + map.getMyLocation().getLongitude(),
Toast.LENGTH_LONG).show();
System.out.println("yalla b2a "
+ map.getMyLocation().getLatitude());
}
Here you are trying to get your current location on map which is wrong you should get location of marker that you dragged. You already have "marker" object here. Use that to get location of this draged marker's location.
LatLng position = marker.getPosition(); //
Toast.makeText(
MainActivity.this,
"Lat " + position.latitude + " "
+ "Long " + position.longitude,
Toast.LENGTH_LONG).show();
It s quite simple i think if you want the long and lat coordinates with a long press ...
First, you have to do GoogleMap.setOnMapLongClickListener(this);
and add to the signature of the containing class: implements OnMapLongClickListener
And here is the code:
#Override
public void onMapLongClick(LatLng point) {
Toast.makeText(MainActivity.this, point.latitude+" "+point.longitude, Toast.LENGTH_SHORT).show();
}
this my code and it loade normali but when I change latitude and longitude it not show the corresponding location. I use emulatar to test the programe. I change latitude and longitude by using emulator control.
package com.rumes.gspuse;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
public class Main extends MapActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MapView map=(MapView) findViewById(R.id.map);
map.setBuiltInZoomControls(true);
final MapController controller=map.getController();
LocationManager manager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener listner=new LocationListener() {
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onLocationChanged(Location location) {
controller.setCenter(new GeoPoint((int)location.getLatitude(), (int)location.getLongitude()));
}
};
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,listner);
}
#Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
You need latitudeE6 and longitudeE6, that's why you don't see any difference in map!
if(location != null) // avoid crash (check for null)..
controller.setCenter(new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6)));