Android Studio ожидает включения Bluetooth - PullRequest
0 голосов
/ 26 апреля 2018

Я довольно новичок в программировании и пытаюсь создать приложение, которое связывается через BluetoothLE с периферийным устройством.

Теперь я мог делать все это, но столкнулся с проблемой. Если телефон Bluetooth активирован после запуска приложения, он вылетит, как только я начну сканирование устройств. Если при запуске приложения Bluetooth уже активирован, такой проблемы нет.

На самом деле при запуске приложения моя программа проверяет, включен ли Bluetooth на телефоне, и если нет, просит пользователя включить его, но это приведет к проблеме, упомянутой выше, поскольку она была включена после запуска приложения. .

Я использую следующий код для этого запроса:

 if (btAdapter != null && !btAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }

Я надеюсь решить мою проблему, приостановив здесь метод oncreate (), пока не активируется Bluetooth. Но как я могу это реализовать?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Добавить следующее разрешение на манифест

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Создать функцию

public void setBluetoothEnable(Boolean enable) {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if(mBluetoothAdapter != null){
      if (enable) {
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
      } else {
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
      }
    }
}

Затем вызовите эту функцию

//For enable bluetooth
setBluetoothEnable(true);

//For disable bluetooth
setBluetoothEnable(false);

Это сработало для меня

0 голосов
/ 26 апреля 2018

Как объяснено в doc , вы должны проверить, включен ли Bluetooth, и если нет, попросить пользователя активировать его. это то, что делает ваш код.


То, что вам, кажется, не хватает, это проверить результат. Когда действие, которое вы открыли, чтобы попросить пользователя активировать Bluetooth, закончено, вы должны проверить, включил ли пользователь его или нет. если да, продолжайте, если нет, делайте, что хотите (например, закройте приложение или повторите запрос).

Для проверки используйте onActivityResult(). Этот метод будет запущен после завершения действия по активации Bluetooth. Там проверьте, что вы вернулись из этого действия, а не из другого, используя код запроса (REQUEST_ENABLE_BT). Затем проверьте, включен ли Bluetooth, если да, сделайте свое дело, если не закройте приложение (например)

Так что у вас будет что-то вроде

void onCreate (Bundle savedInstanceState){
    if (btAdapter != null && !btAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }
}

void onActivityResult (int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_ENABLE_BT) {
        if (btAdapter != null && btAdapter.isEnabled()) {
            startDoingThings();
        } else {
            finnish();
        }
    }
}

Наконец, другие вещи, которые вы делаете в onCreate () после проверки Bluetooth. Не делайте это в onCreate (), но в startDoingThings (). Делая это, вы будете ждать включения Bluetooth, прежде чем делать свои вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...