2015-03-31 34 views
0

我是JAVA的新手,我必須創建一個應用程序來繪製我(通過GPS找到的)和某個預先指定的目的地之間的路線。我遵循在線教程,如http://androidexample.com/GPS_Basic__-__Android_Example/index.php?view=article_discription&aid=68&aaid=93來了解如何閱讀我自己的位置。locationManager.isProviderEnabled與Genymortion仿真器不兼容

我希望我的應用在GPS打開和關閉時的行爲不同。讀取的GPS狀態我使用的LocationManager對象,如下行:

boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

我可以手動通過右擊GPS標籤打開GPS關閉在Genymortion模擬器。下面的圖片顯示了我如何打開GPS。 enter image description here

但是,即使我改變GPS狀態,我的應用程序始終都會說無論是始終是GPSEnabled = true還是始終isGPSEnabled = false。任何人都可以告訴我我錯過了什麼嗎?如果有幫助,我附上大部分代碼。

public class MapDisplayActivity extends Activity implements LocationListener { 
    private MapDisplayFragment fragment; 
    private DrawerLayout sideDrawerMenu; 
    private ListView sideDrawerMenuList; 

    private LocationManager locationManager; 

    private boolean isGPSEnabled; 

    private final static String LOG_TAG = "MapDisplayActivity"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.side_drawer_menu); 

     // some codes come here... 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 


     if (isGPSEnabled) { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
        5000, // 5 sec 
        10, this); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     if (isGPSEnabled) { 
      String str = "Latitude: " + 
      location.getLatitude() 
      + "Longitude: " + location.getLongitude(); 
      Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show(); 

     }else{ 
      gpsLatlon = null; 
     } 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
     Toast.makeText(getBaseContext(), "Gps turned off ", Toast.LENGTH_LONG).show(); 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
     Toast.makeText(getBaseContext(), "Gps turned on ", Toast.LENGTH_LONG).show(); 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    // ~~~~~~~~~~ to imeplement LocationListener ~~~~~~~~~~~~~~ 

    private class SideDrawerClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView parent, View view, int position, long id) { 
      selectItem(position); 
     } 
    } 
// some more methods definitions.... 
    } 

回答

0

它看起來像你只需要設置isGPSEnabled國旗在回調:

@Override 
    public void onProviderDisabled(String provider) { 
     if(provider.equals(LocationManager.GPS_PROVIDER)){ 
      isGPSEnabled = false; 
     } 

     Toast.makeText(getBaseContext(), "Gps turned off ", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     if(provider.equals(LocationManager.GPS_PROVIDER)){ 
      isGPSEnabled = true; 
     } 

     Toast.makeText(getBaseContext(), "Gps turned on ", Toast.LENGTH_LONG).show(); 
    } 

有一點需要注意的是,如果您目前有註冊爲活動這些回調纔會被調用位置監聽器。 因此,就像現在一樣,只有在onProviderDisabled()回調函數將被調用,如果活動以GPS開啓,然後在Activity仍在運行的情況下禁用GPS。

一種方法是在GPS禁用時註冊NETWORK_PROVIDER回調。

這樣你仍然會有一個位置監聽器註冊,並且你會得到GPS的onProviderEnabled()回調。此時,您可以取消註冊NETWORK回調並註冊GPS回調。

+0

我在這些方法上添加了if語句,但isGPSEnabled = true;當它應該是false ... – ThePrincess 2015-03-31 06:14:20

+0

@ThePrincess,當你啓用和禁用GPS時,你是否看到Toast消息? – 2015-03-31 06:15:55

+0

我看到isGPSEnabled = true當我啓用和禁用GPS – ThePrincess 2015-03-31 21:04:41