2016-08-06 38 views
6

從第一眼看到的東西讓GPS座標看起來簡單(僞):架構GPS的基於應用

private void onStart() { 
    res = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); 
    if (res != PackageManager.PERMISSION_GRANTED) { 
    requestPermissions(); 
    } else { 
    startGps(); 
    } 
} 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    if (all_ok) 
    startGps(); 
} 
private void startGps() { 
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    LocationListener locationListener = new LocationListener() {...}; 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
} 

但如何處理異步事件:

  1. 如果locationManager.requestLocationUpdates後什麼用戶暫停和恢復應用,

    1.1我應該撥打locationManager.requestLocationUpdates再次接收GPS數據嗎?

    1.2如果用戶在我的應用程序暫停時禁用GPS,用戶恢復我的應用程序後會怎麼樣?我會收到onProviderDisabled事件嗎?

  2. 如何處理ACCESS_FINE_LOCATION權限的運行時撤銷,如果在locationManager.requestLocationUpdates調用後發生?撤消後會發生什麼,Android是否通過onStatusChangedonProviderDisabled報告了我的問題?

  3. 我聽說新的Android允許在屏幕上的幾個窗口, 如果一個窗口都屬於會發生什麼我的應用程序,另一個「系統偏好設置」,並吊銷用戶ACCESS_FINE_LOCATION沒有我的應用程序的暫停/恢復?

回答

1
  1. 回答問題1

1.1:其更好地停止時,您的應用程序被暫停或停止(的onPause()和的onStop())聽GPS。這將節省電池壽命。所以再次在onResume()方法中啓動監聽器。

removeUpdates(LocationListener的)

如果你不想removeUpdates,那麼你需要不叫再打電話locationManager.requestLocationUpdates。

1.2:每當應用程序進入前臺,請執行isProviderEnabled(provider)檢查並顯示一個對話框給用戶。

要回答你的問題:

https://developer.android.com/reference/android/location/LocationManager.html

萬一提供商用戶禁用,更新將停止,並且提供商可用的更新將被髮送。一旦提供程序再次啓用,位置更新將立即恢復併發送提供程序可用性更新。提供者還可以隨時發送狀態更新,並附加特定於提供者的更新。如果提供回調,則狀態和可用性更新通過onProviderDisabled(String),onProviderEnabled(String)或onStatusChanged(String,int,Bundle)進行更新。

  1. 如果權限被吊銷,您的應用程序可能會崩潰。因爲你無法訪問位置功能。

java.lang.SecurityException異常:提供網絡需要ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION許可

  • 在多窗口裝置中,一個應用程序被聚焦將在恢復狀態下,其他應用程序將處於暫停狀態。關於權限撤銷我已經回答了第2點。
  • 如果位置從設置中關閉第三方應用程序將不會收到通知。您需要使用isProviderEnabled(provider)方法來檢查位置狀態。

    相關問題