2012-11-29 64 views
2

我打算在單擊時啓動服務的活動中有一個按鈕。但是,需要啓用GPS才能完成其工作,因此如果禁用了GPS,我想禁用該按鈕。有沒有辦法讓GPS在啓用/禁用GPS時通知我的活動,以便我可以相應地啓用/禁用按鈕?在活動中捕獲系統事件

回答

1

此鏈接介紹如何創建一個位置監聽器: http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/

我的情況下,複製的重要組成部分向下跌破該網站宕機的未來。第一步是創建一個LocationListener:

private final class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location locFromGps) { 
     // called when the listener is notified with a location update from the GPS 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // called when the GPS provider is turned off (user turning off the GPS on the phone) 
     // Dim the button here! 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // called when the GPS provider is turned on (user turning on the GPS on the phone) 
     // Brighten the button here! 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // called when the status of the GPS provider changes 
    } 
} 

然後,您需要註冊該偵聽器。這也許應該走在你的onCreate()

LocationListener locationListener = new MyLocationListener(); 
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 10, this.locationListener); 

在requestlocationupdates第二個和第三個參數你應該讓巨大的,所以你沒有得到locationupdates,因爲你真的不關心這些,唯一提供商啓用/禁用的變化。

+0

只是一個小小的(無關)問題...我如何從MyLocationListener中獲取對按鈕的引用來增亮/昏暗嗎? – zoran119

+0

最簡單的方法是讓MyLocationListener成爲你活動中的一個內部類,這樣它就可以訪問你所有的活動方法和字段。要使其成爲內部類,只需將類代碼放入活動代碼中即可。 [本網站](http://viralpatel.net/blogs/inner-classes-in-java/)爲內部課程提供了一個體面的介紹,但如果您有任何問題,請告訴我。 –

+0

謝謝你。我確實嘗試了內部課程,這很好。只是出於興趣,如果我想讓位置偵聽器成爲一個獨立的類(因爲它也可以從服務內部使用),那麼獲取對按鈕的引用的方法是什麼?共享監聽器還是隻爲服務創建內部類是一個好主意? – zoran119

0

請使用此代碼獲取GPS狀態。使用此代碼中的onResume活動

private LocationManager mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
boolean GPSprovider = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

,並根據GPSProvider您可以啓用和禁用按鈕。

+0

這就是我的想法,但是當你拉下通知欄時(某些電話在通知欄上有GPS快捷方式並且可以通過這種方式啓用/禁用GPS),似乎'onResume'不會被解僱。 – zoran119

0

試試這個

final String GpsProvider = Settings.Secure.getString(
       getContentResolver(), 
       Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
if (GpsProvider.equals(""){ 
//No GPS 
}else{ 
//GPS available 
} 
+0

我知道如何檢測GPS是否打開...我希望我的活動通知GPS狀態變化 – zoran119