2014-04-05 74 views
0

我正在嘗試使用GPS獲取當前位置。使用GPS獲取我目前在Android的位置

考慮下面的代碼:

LocationManager manager = (LocationManager)this. 
      getSystemService(Context.LOCATION_SERVICE); 

    Location loc = manager.getLastKnownLocation(
      LocationManager.GPS_PROVIDER); 

    loc=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

    double la=loc.getLatitude(); 
    double lon=loc.getLongitude(); 

當使用AVD仿真器定義的固定座標,或者當我的Android智能手機進行測試,這是行不通的。

而在Android的工作室試圖與模擬器調試它,得到它貼在loc.getLatitude。總體而言,在年底,我得到了一個Java RuntimeException,如下圖所示:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.social.gps/com.example.social.gps.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
     . 
     . 
     . 

我猜想它,因爲loc引用爲null。

我:

<uses-permission 
    android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission 
    android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
在清單

那麼我怎樣才能使它工作?

+0

安置自己的堆棧跟蹤的其餘部分,請。 '這裏NullPointerException'可能意味着什麼 - 上下文通過爲null,等... – ChuongPham

回答

0

有無DDMS透視與手動發送經緯度給emulator.Because仿真器不檢索位置狀態

0

這是因爲您的loc變量爲空 - 它發生在緩存中沒有最後一個位置時。

getLastKnownLocation()不返回當前位置,它返回由您或其他一些應用先前獲得的位置。要接收當前位置,您需要使用locationManager.requestLocationUpdates()訂閱位置更新。如果用戶啓用並通過回叫發送位置更新,那麼將啓動提及的提供商(GPS,網絡或被動)。

+0

但我使用地理修復命令,並根據Android的手冊冊添加到仿真器的位置,這是獲得位置 – user2162550

+0

做的方式'getLastKnownLocation()'工作,一些應用程序需要先獲取位置。我想地理修復不會直接設置最後一個位置,只是調用LocationManager更新命令。爲了接收這些更新並將它們存儲在最後一個位置緩存中,您需要訂閱它們。 –

+0

@ user2162550我的意思是,當您通過地理修補程序發送位置時,位置管理器會發現沒有人訂閱更新,只是放棄它而不更新其緩存。 –