Две проверки Content Resolver для Allow Mock Locations, обеспечивающие разные результаты - PullRequest
2 голосов
/ 02 января 2012

У меня есть следующий код, который оценивается как true в эмуляторе (ОС 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 без всех этих установленных настроек (то есть некоторые, такие как Allow Mock Locations, начнут свою жизнь с нуля) ... ожидая, пока пользователь не проверит настройку, прежде чем записать 1 (или 0, когда не проверено) в таблицу).

Так в чем проблема?Ну, из сообщений об ошибках я чувствую, что разные устройства обрабатывают эту проверку по-разному, но не имеют доступа ко всем типам устройств, я ищу рекомендации о том, как обрабатывать в общем / лучше.Кроме того, почему первый пример не работает?

1 Ответ

3 голосов
/ 07 января 2012

Ну, я решил просто использовать следующую проверку:

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.

...