2015-04-08 41 views
2

用戶流量:單擊按鈕,重定向到顯示谷歌地圖的MapActivity。一個位置被給出,有一個按鈕用於使用當前位置到達給定位置的路線。當位置服務被關閉時,用戶被提示將其打開。用戶更改位置設置後刷新活動

private void goToLocationSettings(){ 
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivityForResult(intent, 1); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == 1) { 
     switch (requestCode) { 
      case 1: Log.e("test", "onActivityResult"); 
       break; 
     } 
    } 
} 

當用戶返回函數應該可以完成。但程序再次打開設置。日誌從不顯示。

如果我在設備上打開位置服務後等了一下,我沒有問題將其打開,但日誌消息仍未顯示。

我不知道我在做什麼錯。

回答

7

您正在檢查錯誤的resultCode,以避免混淆使用常量Activity#RESULT_OKActivity#RESULT_CANCELED。如果您檢查文檔,您會看到RESULT_OK的int值爲-1。

在開始結果的位置設置活動的情況下,resultCode將始終爲0,因爲用戶使用後退按鈕退出設置活動,因此對於系統來說,他看起來像他取消了請求。

static final int LOCATION_SETTINGS_REQUEST = 1; 

protected void onActivityResult(int requestCode, int resultCode, 
     Intent data) { 
    if (requestCode == LOCATION_SETTINGS_REQUEST) { 
     // user is back from location settings - check if location services are now enabled 
     checkGPS(); 
    } 
} 
+0

那麼這很有趣,如果我用調試器運行它,它會出現resultCode = 0,因此如果我把Log放在那裏,它就不會顯示日誌。任何想法可能會造成這種情況? –

+0

您無法從位置設置活動獲取結果,因此執行此操作的方法是僅檢查用戶返回時現在是否啓用位置服務。 –

+1

在這種情況下'resultCode'將始終爲0,因爲用戶使用後退按鈕退出設置活動,所以就好像他取消了請求。 –