2011-12-23 265 views
6

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

有没有人对此有所了解?我正在用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()); 
      }  


      } 
} 

谢谢!

+0

gps无法在模拟器中工作。在真实设备上试用您的代码。 – Snicolas

+0

请检查这个链接它可能会帮助你。 [Android模拟器中的GPS位置](http://stackoverflow.com/questions/2279647/how-to-emulate-gps-location-in-the-android-emulator) –

+0

感谢Snicolas mybe你的回答就是我要搜索的内容但我怎么才能得到apk文件? –

回答

1

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

+0

非常感谢:) –

+0

或使用'geo fix' http://stackoverflow.com/questions/2279647/how-emulate-gps-location-in-the-android-emulator –

4

打开虚拟设备管理器并单击编辑。在硬件部分单击新建并添加GPS支持并将该值更改为true。 现在启动模拟器并打开一个控制台。 如果仿真器在控制台telnet localhost 5554中启动完成类型。 当建立telnet连接时,您可以放置​​如下位置:geo fix 21.42 42

+0

是的,它得到的位置我在本地主机上设置,但我希望它显示我当前的位置,这意味着我现在在哪里! –

+0

找出你当前的坐标并使用'geo fix'输入它们或去购买一台android。 –

3

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

请记住,您必须为此添加所需权限(ACCESS_MOCK_LOCATION)。

希望这会有所帮助!

+0

是的,我做了,但我希望它显示我的当前位置不是模拟器中的locatiob! –

+0

然后你需要一个智能手机与您的电脑与GPS或GPS。 –

+0

是的!我的应用程序的版本是7!我可以用iphone测试它吗? –