对允许模拟位置的内容解析器进行两次检查,以提供不同的结果

时间:2012-01-02 08:51:23

标签: android geolocation android-contentresolver

当“应用程序>设置>开发>允许模拟位置”未选中时,我在模拟器(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 Locations的生命将以null开始)...等到用户检查设置之前将1(或未经检查时为0)写入表中)

那么问题是什么?好吧,我从错误报告中得到的感觉是,不同设备以不同方式处理此检查,但无法访问所有设备类型,我正在寻找有关如何处理一般/最佳的建议。另外,为什么第一个例子不起作用?

1 个答案:

答案 0 :(得分: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;                     
    } 
} 

当然,这种方法适当地处理null情况 - 返回false。

我不能说为什么原始问题中的代码不起作用......可能是SDK中的错误。