2012-09-03 28 views
1

我試過了下面的程序。它在eclipse中工作 - >如果你通過ddms給出經度和緯度值,則意味着它在仿真器中顯示爲當前位置......但是它並不檢測android手機中的當前位置。使用GPS無法找到當前位置

private class mylocationlistener implements LocationListener { 

    public void onLocationChanged(Location location) {  
    Date today = new Date(); 
Timestamp currentTimeStamp = new Timestamp(today.getTime()); 

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
LocationListener ll = new mylocationlistener();  
boolean isGPS = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      if (isGPS){ 
       lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
       if (location != null) { 


     Log.d("LOCATION CHANGED", location.getLatitude() + ""); 
     Log.d("LOCATION CHANGED", location.getLongitude() + ""); 
     String str = "\n CurrentLocation: "+ 
     "\n Latitude: "+ location.getLatitude() + 
     "\n Longitude: " + location.getLongitude() + 
     "\n Accuracy: " + location.getAccuracy() + 
     "\n CurrentTimeStamp "+ currentTimeStamp;   
      Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show(); 
      tv.append(str);   
        }  
     else 
      { 
     String s1="GPS activation in process"; 
      Toast.makeText(MainActivity.this,s1,Toast.LENGTH_SHORT).show(); 
      /*alert.setTitle("gps"); 
      alert.setMessage("GPS activation in progress,\n Please click after few second."); 
      alert.setPositiveButton("OK", null); 
      alert.show();*/ 

      } 
      } 
      else 
      { 
       String s2="Enable Gps"; 
      Toast.makeText(MainActivity.this,s2,Toast.LENGTH_SHORT).show(); 
      } 

    } 





public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

}

+0

您是否在設備中啓用了「GPS衛星」? – Praveenkumar

+0

GPS正在工作.... Android手機默認地圖應用程序顯示當前位置,但我的應用程序未檢測到它 – user1642978

+1

在Android設備位置不經常更改,你必須去外面的位置,但我相信你會工作時你的位置改變了。 –

回答

1

我爲做一個服務。獲取經度/緯度很容易使用它。

將此課程複製/粘貼到您的項目中。

package com.sample; 
    import com.sample.globalconstant; 
    import android.app.Service; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.location.Location; 
    import android.location.LocationManager; 
    import android.os.Bundle; 
    import android.os.IBinder; 
    import android.util.Log; 
    import android.widget.Toast; 

    public class MyServiceGPS extends Service 
    { 
     private static final String TAG = "BOOMBOOMTESTGPS"; 
     private LocationManager mLocationManager = null; 
     private static final int LOCATION_INTERVAL = 1000; 
     private static final float LOCATION_DISTANCE = 10f; 

     private class LocationListener implements android.location.LocationListener{ 
      Location mLastLocation; 
      public LocationListener(String provider) 
      { 
       Log.e(TAG, "LocationListener " + provider); 
       mLastLocation = new Location(provider); 
      } 
      public void onLocationChanged(Location location) 
      { 
       Log.e(TAG, "onLocationChanged: " + location.getLatitude() +"....."+ location.getLongitude()); 
       globalconstant.lat = location.getLatitude(); 
       globalconstant.lon = location.getLongitude(); 
       Toast.makeText(getApplicationContext(), location.getLatitude() +"....."+ location.getLongitude(), 1000).show(); 
       mLastLocation.set(location); 
      } 
      public void onProviderDisabled(String provider) 
      { 
       Log.e(TAG, "onProviderDisabled: " + provider);   
      } 
      public void onProviderEnabled(String provider) 
      { 
       Log.e(TAG, "onProviderEnabled: " + provider); 
      } 
      public void onStatusChanged(String provider, int status, Bundle extras) 
      { 
       Log.e(TAG, "onStatusChanged: " + provider); 
      } 
     } 
     LocationListener[] mLocationListeners = new LocationListener[] { 
       new LocationListener(LocationManager.GPS_PROVIDER), 
       new LocationListener(LocationManager.NETWORK_PROVIDER) 
     }; 
     @Override 
     public IBinder onBind(Intent arg0) 
     { 
      return null; 
     } 
     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) 
     { 
      Log.e(TAG, "onStartCommand"); 
      super.onStartCommand(intent, flags, startId);  
      return START_STICKY; 
     } 
     @Override 
     public void onCreate() 
     { 
      Log.e(TAG, "onCreate"); 
      initializeLocationManager(); 
      try { 
       mLocationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, 
         mLocationListeners[1]); 

      } catch (java.lang.SecurityException ex) { 
       Log.i(TAG, "fail to request location update, ignore", ex); 
      } catch (IllegalArgumentException ex) { 
       Log.d(TAG, "network provider does not exist, " + ex.getMessage()); 
      } 
      try { 
       mLocationManager.requestLocationUpdates(
         LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, 
         mLocationListeners[0]); 
      } catch (java.lang.SecurityException ex) { 
       Log.i(TAG, "fail to request location update, ignore", ex); 
      } catch (IllegalArgumentException ex) { 
       Log.d(TAG, "gps provider does not exist " + ex.getMessage()); 
      } 
     } 
     @Override 
     public void onDestroy() 
     { 
      Log.e(TAG, "onDestroy"); 
      super.onDestroy(); 
      if (mLocationManager != null) { 
       for (int i = 0; i < mLocationListeners.length; i++) { 
        try { 
         mLocationManager.removeUpdates(mLocationListeners[i]); 
        } catch (Exception ex) { 
         Log.i(TAG, "fail to remove location listners, ignore", ex); 
        } 
       } 
      } 
     } 
     private void initializeLocationManager() { 
      Log.e(TAG, "initializeLocationManager"); 
      if (mLocationManager == null) { 
       mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 
      } 
     } 
    } 

複製,當你想在你的Activity這個代碼開始:

startService(new Intent(this,MyServiceGPS.class)); 

創建一個類globalconstant:

public class globalconstant { public static double lat, lon; } 

,當你想在你的項目當前的緯度和經度只寫這個globalconstant.lat ,globalconstant.lon

添加uses-permission in Manifest

0

如果要覆蓋您當前位置的則是更好地使用默認的方法,而不是定製覆蓋..

這是當前位置的默認覆蓋方法。

MyLocationOverlay mMyLocationOverlay = new MyLocationOverlay(getApplicationContext(), 
       Your_MapView); 
mMyLocationOverlay.enableMyLocation(); 
mMyLocationOverlay.onProviderEnabled(LocationManager.NETWORK_PROVIDER); 

mapOverlays = map_view.getOverlays(); 

你也可以使用GPS

mMyLocationOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER); 
0

有沒有可能是你的Android手機是沒有得到GPS信號?如果GPS還沒有時間獲得修復,locationManager.getLastKnownLocation將返回null。 Android不提供'給我現在位置'的方法。當GPS得到修復時,onLocationChanged()將運行。如果仿真器沒問題,那麼設備有問題。結帳我的問題Not able to get Location by GPS : Android我有類似的問題。我發生的事情是,我通過網絡提供商接收谷歌地圖中的位置。你確定你通過GPS接收它嗎?