当“应用程序>设置>开发>允许模拟位置”未选中时,我在模拟器(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)写入表中)
那么问题是什么?好吧,我从错误报告中得到的感觉是,不同设备以不同方式处理此检查,但无法访问所有设备类型,我正在寻找有关如何处理一般/最佳的建议。另外,为什么第一个例子不起作用?
答案 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中的错误。