Перейти к содержанию
Fire Monkey от А до Я
  • 0

[iOS]Bluetooth


Kitty

Вопрос

Рекомендуемые сообщения

  • 0
17 часов назад, Kitty сказал:

Подскажите, пожалуйста, как на iOS телефоне проверить при старте программы или включен Bluetooth

 

Посмотрите TBluetoothManager->CurrentAdapter->State

Ссылка на комментарий
  • 0

Спасибо. Посмотрела, что для CurrentAdapter можно также использовать компонент TBluetoothLE.

Подскажите, где ошибка? Блютуз на телефоне iPhone 5 включен, а при нажатии на кнопку вижу сообщение OFF:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
 BluetoothLE1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(BluetoothLE1->CurrentAdapter->State == TBluetoothAdapterState::Off)
  {
	ShowMessage(L"OFF");
  }
  else
	  {
	   ShowMessage(L"ON");
	  }

}

 

Ссылка на комментарий
  • 0

Без компонента тоже OFF...

private:	// User declarations
    TBluetoothLEManager * FBluetoothManagerLE;

//***
void __fastcall TForm1::FormActivate(TObject *Sender)
{
 FBluetoothManagerLE = TBluetoothLEManager::Current;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(FBluetoothManagerLE->CurrentAdapter->State == TBluetoothAdapterState::Off)
  {
	ShowMessage(L"OFF");
  }
  else
	  {
	   ShowMessage(L"ON");
	  }

}

 

Ссылка на комментарий
  • 0

Похоже, что так работает, правда не известно ли для всех телефонов будет стабильно:

 if(FBluetoothManagerLE->ConnectionState == TBluetoothConnectionState::Connected)
  {
   ShowMessage(L"Connected");
  }
  else
   {
	ShowMessage(L"Disconnected");
   }

 

Ссылка на комментарий
  • 0
2 часа назад, Kitty сказал:

Похоже, что так работает, правда не известно ли для всех телефонов будет стабильно:


 if(FBluetoothManagerLE->ConnectionState == TBluetoothConnectionState::Connected)
  {
   ShowMessage(L"Connected");
  }
  else
   {
	ShowMessage(L"Disconnected");
   }

 

А почему нет? Это жа iOs, а не андроид. Там, если завелось для одного, для других будет ок!

Ссылка на комментарий
  • 0

А еще такой вопрос:

Берем стандартный пример и компилируем при выключенном блютуз на устройство ios:

C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\CPP\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner

В приложении получаем окно, после нажатия кнопки:

Error
Bluetooth device not found: discconnected of turned off.

Как сделать это сообщение на русском или заменить полностью своим?

 

Изменено пользователем Kitty
Ссылка на комментарий
  • 0
  • Модераторы
29 минут назад, Kitty сказал:

А еще такой вопрос:

Берем стандартный пример и компилируем при выключенном блютуз на устройство ios:

C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\CPP\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner

В приложении получаем окно, после нажатия кнопки:

Error
Bluetooth device not found: discconnected of turned off.

Как сделать это сообщение на русском или заменить полностью своим?

 

это нужно искать в исходниках, найдете модуль положите его себе в проект и заменить в нем сообщение на своё

Ссылка на комментарий
  • 0

Избавиться от английского окна, вроде удалось с помощью таймеров, но это предварительная оценка. Пока английского окна не вижу. Вижу информацию понятную пользователю для его дальнейших действий без перезапуска приложения. насколько правильно, не знаю...:

void __fastcall TForm1::TimerStartTimer(TObject *Sender)
{
  //через 2 секунды запускаем Beacon1 если Bluetooth включен
  TimerStart->Enabled = false; //и сразу отключаем таймер
  Beacon1->Enabled = true;
}

//---------------------------------------------------------------------------

//проверка включен ли Bluetooth 
bool __fastcall TForm1::ManagerConnected(void)
{
	if(FBluetoothManagerLE->ConnectionState == TBluetoothConnectionState::Connected)
	{
	 return true;
	}
	else
	  {
		return false;
	  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
  try
	{
	  FBluetoothManagerLE = TBluetoothLEManager::Current;
	  if(ManagerConnected())
	   {
	   //есть Bluetooth
	   TimerStart->Enabled = true;//программа идет по нужному сценарию т.к. Bluetooth включен
	   }
	   else
		{
		 //нет Bluetooth
		 ShowMessage(L"Включите Bluetooth.");
		 TimerCheckBluetooth->Enabled = true; //проверяем вкл. Bluetooth каждые 10 секунд
		}
	}
	 catch (Exception &ex)
	   {
		ShowMessage(L"Ошибка: " + ex.Message);
	   }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TimerCheckBluetoothTimer(TObject *Sender)
{
  if(ManagerConnected())
  {
   //если Bluetooth был включен пользователем уже при включенной программе отключаем таймер проверки Bluetooth
   TimerCheckBluetooth->Enabled = false;
   TimerStart->Enabled = true; //и запускаем программу по нужному сценарию т.к. Bluetooth включен
  }
}

 

Ссылка на комментарий
  • 0

Все таки этот код не защищает полностью от английского окна...  Пользователь может совершит не адекватное действие и тогда английское исключение.

Действие: в работающем приложении с включенным блютуз, зайти в настройки телефона и выключить блютуз, после чего вернуться в приложение.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...