2012-01-02 73 views
2

當「應用程序>設置>開發>允許模擬位置」未選中時,我有以下在模擬器(OS 2.3.3)中評估爲true的代碼。我期望該方法返回false,但它返回true。允許模擬​​位置提供不同結果的內容解析器的兩項檢查

public static boolean isMockLocationSet(Context context) { 
    if (Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) { 
     return false; 
    } 
    else { 
     return true;      
    } 
} 

以下更改返回false,如預期(BTW什麼是更好的.equals或.ContentEquals?):

public static boolean isMockLocationSet(Context context) { 
    if (Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) { //.contentEquals("0") 
     return false; 
    } 
    else { 
     return true;      
    } 
} 

我更喜歡第一個例子,因爲它應該允許情況下,空值可能存在,分配一個默認值爲0,並仍然允許執行邏輯而不失敗(事實上,我懷疑這種情況可能存在但沒有證明它 - 例如,一個製造商在沒有建立所有這些設置的情況下實現Android(即有些像Allow Mock位置將從零開始)......等待用戶在寫入1之前檢查設置(否則爲未選中狀態)到表)。

那麼問題是什麼?好吧,我從錯誤報告中得到了感覺,即不同設備處理此檢查的方式不同,但無法訪問所有設備類型,我正在尋求關於如何處理一般/最佳設置的建議。另外,爲什麼第一個例子不起作用?

回答

3

嗯,我決定簡單地使用下面的檢查:

public static boolean isMockLocationSet(Context context) { 
    if (Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).contentEquals("1")) { 
     return true; 
    } 
    else { 
     return false;      
    } 
} 

這種方法,當然,與空的情況下適當地交易 - 返回false。

我不能說爲什麼原始問題中的代碼不工作......也許在SDK中的錯誤。

相關問題