当未选中“应用程序>设置>开发>允许模拟位置”时,我有以下代码在模拟器(OS 2.3.3)中评估为真。我希望该方法返回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(顺便说一句,.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(例如,允许模拟位置之类的设置会以 null 开始)...等到用户检查设置后再将 1(或未选中时为 0)写入表)。
那么问题是什么?好吧,我从错误报告中感觉到不同的设备以不同的方式处理此检查,但无法访问所有设备类型,我正在寻找有关如何处理一般/最佳的建议。另外,为什么第一个示例不起作用?