android gps当前位置

时间:2011-12-23 13:04:17

标签: android gps

我想显示我当前的位置,但它显示了我在命令行上设置的纬度和经度!如果我没有在命令行上设置参数,它会显示Eclipse中包含的纬度和经度!

有没有人对此有所了解?我正在测试AVD。

我做了一个测试,看看我的位置是否已启用,但事实并非如此。我不确定为什么会这样。

这是我的代码:

package com.manita.mapuse;


import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;

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 com.google.android.maps.MyLocationOverlay;



 public class MapuseActivity extends MapActivity implements LocationListener {

     private MapView mapView = null;
        private LocationManager lm = null;
        private double lat = 0;
        private double lng = 0;
        private double alt = 0;
        private MapController mc = null;
        private MyLocationOverlay myLocation = null;
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) this.findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        lm = (LocationManager) this.getSystemService(LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0,
            this);

        mc = mapView.getController();
        mc.setZoom(10);

        myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
        myLocation.runOnFirstFix(new Runnable() {
            public void run() {
            mc.animateTo(myLocation.getMyLocation());
            mc.setZoom(10);
            }
        });


         LocationManager locationManager;
         String context = Context.LOCATION_SERVICE; 
         locationManager = (LocationManager)getSystemService(context);
         String provider = LocationManager.GPS_PROVIDER;
         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
         Location location = locationManager.getLastKnownLocation(provider);
         locationManager.getProvider(provider);
        if(!locationManager.isProviderEnabled(provider)){
             locationManager.setTestProviderEnabled(provider, true);
            }
            boolean enabled = locationManager.isProviderEnabled(provider);
            if(enabled){

                Toast.makeText(getBaseContext(),
                         "provide enabled : Latitude = " + lat + " Longitude = " + lng+" Altitude = " + alt,
                         Toast.LENGTH_SHORT).show();

            }
            else{
                Toast.makeText(getBaseContext(),
                         "provider disabled : Latitude = " + lat + " Longitude = " + lng+" Altitude = " + alt,
                         Toast.LENGTH_SHORT).show();

            }
            if(location!=null){
              lat = location.getLatitude();
              lng = location.getLongitude();
              alt = location.getAltitude();
              Toast.makeText(getBaseContext(),
                         "providerrr enabled : Latitude = " + lat + " Longitude = " + lng+" Altitude = " + alt,
                         Toast.LENGTH_SHORT).show();
            }
            else{
                Toast.makeText(getBaseContext(),
                         "location not found : Latitude = " + lat + " Longitude = " + lng+" Altitude = " + alt,
                         Toast.LENGTH_SHORT).show();
            } 



        mapView.getOverlays().add(myLocation);
        if (myLocation.isMyLocationEnabled()!=false)
        {
            GeoPoint p =myLocation.getMyLocation();
            lat= p.getLatitudeE6();
            lng= p.getLongitudeE6();
            alt = location.getAltitude();
            Toast.makeText(getBaseContext(),
                     "geolocalisation activé lat: "+lat+ " long: " +lng +" Altitude = " + alt,
                     Toast.LENGTH_SHORT).show();
        }
        else
        {

            Toast.makeText(getBaseContext(),
                     "geolocalisation desactivée" ,
                     Toast.LENGTH_SHORT).show();
        }

        // appel de la fonction insert values 
        insertvalues(lat, lng);
        }

        @Override
        protected void onResume() {
        super.onResume();
        myLocation.enableMyLocation();
        myLocation.enableCompass();
        }

        @Override
        protected boolean isRouteDisplayed() {
        return false;
        }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_S) {
            mapView.setSatellite(!mapView.isSatellite());
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_T) {
            mapView.setSatellite(!mapView.isTraffic());
            return true;
        }
        return super.onKeyDown(keyCode, event);
        }

        @Override
        public void onLocationChanged(Location location) {
        lat = location.getLatitude();
        lng = location.getLongitude();
        Toast.makeText(
            getBaseContext(),
            "Location change to : Latitude = " + lat + " Longitude = "
                + lng, Toast.LENGTH_SHORT).show();
        GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
        mc.animateTo(p);
        mc.setCenter(p);
        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }


        ///// insert valeurs ....
        public void insertvalues(double lat, double lng){




          //http post c à d envoi des données
          try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new   

              HttpPost("http://www.pizza-paris.com/clic/marwa/test/form.php?latitude="+lat+"&longitude="+lng);

                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                Log.i("postData", response.getStatusLine().toString());

            }

            catch(Exception e)
            {
                Log.e("log_tag", "Error in http connection "+e.toString());
            }       


            }
 }

谢谢!

3 个答案:

答案 0 :(得分:4)

打开虚拟设备管理器并点按“编辑”。在硬件部分单击新建并添加GPS支持并将值更改为true。 现在启动模拟器并打开控制台。 如果模拟器已启动完成,请在控制台telnet localhost 5554中键入。 建立telnet连接后,您可以放置​​如下位置:geo fix 21.42 42

答案 1 :(得分:3)

要添加到现有答案,如果您确实需要在模拟器上测试功能,则可以使用模拟位置。你可以在这里找到更多http://developer.android.com/guide/topics/location/obtaining-user-location.html#MockData

请注意,您必须为此添加所需的权限(ACCESS_MOCK_LOCATION)。

希望这有帮助!

答案 2 :(得分:1)

除非您的PC / Mac具有GPS,否则AVD无法检测您的位置。使用真实设备或手动输入值来测试您的程序。