Исключение Android data_roaming и bluetooth_on

#android

#Android

Вопрос:

На Android я пытался получить data_roaming и bluetooth_on, чтобы узнать, включены ли они.

Я использовал следующее:

 Cursor cursorCheck = getContentResolver().query(
                Settings.Global.CONTENT_URI,
                new String[]{Settings.Global.BLUETOOTH_ON},
                null, null, null);
        assert cursorCheck != null;
        cursorCheck.moveToFirst();
        for (int i = 0; i < cursorCheck.getCount(); i  ) {
            Log.i("check1", cursorCheck.getString(0)   " ");
            cursorCheck.moveToNext();
        }
        cursorCheck.close();
  

Однако я получаю следующее исключение:

«java.lang.Исключение IllegalArgumentException: недопустимый столбец: bluetooth_on» / «java.lang.Исключение IllegalArgumentException: недопустимый столбец: data_roaming»

URL-адреса: https://developer.android.com/reference/android/provider/Settings .Глобальный.html#BLUETOOTH_ON
https://developer.android.com/reference/android/provider/Settings .Глобальный.html#DATA_ROAMING

Спасибо

Ответ №1:

Проблема в вашем коде заключается в том, что Settings.Global.BLUETOOTH_ON это не имя столбца, имя столбца name bluetooth_on это значение внутри этого столбца, поэтому, когда вы выполняете запрос, напишите так :

  Cursor cursorCheck = getContentResolver().query(
                Settings.Global.CONTENT_URI,
                null,
               "name=?", new String[]{"bluetooth_on"}, null);
  

это выполняет поиск в столбце name со bluetooth_on значением и выдает результат.

Для нескольких добавьте or подобное name=? or name=? и добавьте значения, которые вы хотите получить, в массив строк.

Чтобы включить Bluetooth в выключенное состояние, используйте :

 cursorCheck.getString(2)
  

наслаждайтесь!

Комментарии:

1. Спасибо, но я получаю значения, которые не равны 0 или 1, я получаю числа, например, 29, что это значит?

2. Попробуйте изменить cursorCheck.getString(0) другие значения, например, 1,2, возможно, вы получите

3. @EliorCohen используйте cursorCheck.getString(2) это даст вам правильный

4. Спасибо, но «имя =? или name=?» не работает, почему? Я получаю: Вызвано: java.lang. Исключение IllegalArgumentException: поддерживается SQL: содержимое uri:// some_table/some_property с null где и где аргументы uri:// some_table с именем запроса =? и одно имя в качестве аргумента uri content://some_table с именем запроса=some_name и нулевыми аргументами, но получил — uri:content://settings/global, где:name=? или имя =? Где: [data_roaming, bluetooth_on]

5. Используйте его, когда вам нужно получить два значения