Реализация Bluetooth-соединения в j2me в упрощённом варианте

Введение

Данная статья ориентирована на тех, у кого есть желание написать j2me приложение с использованием Bluetooth, не вникая в логику соединения. Возможно, она окажется полезной и для оставшейся аудитории. Предлагаю Вам рассмотреть основные классы, которые мы будем использовать при создании приложения:

Чтобы создать простейшее соединение, необходимо:

1. Сервер

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

  • BlueServer(String av) – здесь в качестве параметра av можно задать значение атрибута, по которому клиент может идентифицировать данный сервис. В общем случае значений атрибутов может быть и больше, и не обязательно строкового типа, но я не стал в это углублятся.
  • BlueServer() – базовый конструктор без параметров, где в качестве единственного значения атрибутов сервиса передается одна строка с дружественным именем устройства. Логика сервера устроена таким образом, что при подключении клиента сервер открывает новое соединение для последующего подключения клиентов.

В приложении можно реализовать только один сервер, поэтому нет необходимости создавать более одного экземпляра этого класса.

BlueServer bs=new BlueServer(“MyServer”);
bs.start();

2. Искатель

Следующим шагом необходимо организоватьпоиск устройств-серверрв, и выбрать из этого списка нужный сервис. Поможет в этом класс BlueSearcher, из которого нам понадобится два метода:

  • String[] getServices() – метод, который возвращает список имен найденных сервисов.
  • ServiceRecord getRecordById(int id) – метод, который возвращает само значение сервиса по его номеру в списке найденных сервисов. Этот метод будет необходим при создании подключения клиентом.
 BlueSearcher bch=new BlueServer();
bch.start();
 

3. Клиент

На заключительном этапе мы создаемклиент, который будет подключаться к одному из найденных серверов. Для этого будем использовать класс BlueClient, которому нужно передать значение сервиса. Класс имеет два конструктора:

  • BlueClient(ServiceRecord record) и BlueClient(ServiceRecord record, String name), где name - имя клиента, а record - экземпляр класса ServiceRecord, тот самый сервис, который был найден BlueSearcher.
 BlueClient bc=new BlueClient(bch.getRecordById(id));
bc.start();
 

Передача данных

Конечной целью нашей программы будет не просто установление соединения, а передача данных. Эту функцию выполняет класс BlueDataManager, который, в принципе, нам не понадобится явно, поскольку он встроен в классы BlueServer и BlueClient. Мы будем использовать метод send(String s) этого класса, который отсылает данные от клиента серверу, или наоборот. Класс клиента содержит один экземпляр этого класса, класс сервера – массив, поскольку к серверу может подключиться до восьми клиентов.

 bc.dataManager.send(“myClientData”);
for(int=0; i<8; i++)
bs.dataManager[i].send(“myServerData”);
 

Приём данных

Для приема данных нужно просто создать новый класс, наследующий абстрактный класс BlueListener и содержащий два метода:

  • void actionReceiveData(String s) – данный метод, вызывается именно в том месте, где необходимо принять данные. При реализации этого метода нам необходимо указать, что именно мы хотим делать с принятыми данными s (например отобразить в форме или канвасе).
  • void actionAfterClose() – здесь можно реализовать какое-нибудь действие, связанное с разрывом соединения.
class BListenerextends BlueListener{
public void actionReceiveData(String s){
text+= s;
form.deleteAll();
 
form.append(text);
 
}
 
 
 
public void actionAfterClose(){
 
text= “connection is closed”;
 
form.deleteAll();
 
form.append(text);
 
 
}
 
}

Чтобы все это работало, нужно еще установить этот слушатель событий для классов клиента и сервера. Сделать это можно следующим образом:

bc.setBlueListener(new BListener());

Все операции по созданию соединений и поиску сервисов лучше создавать в отдельном потоке. Основные классы наследуются от Thread и запускается методом start(). Сервер может разорвать все соединения с клиентами методом stop(). Клиент также может разорвать соединение. Для отслеживания хода выполнения программы реализован класс BlueLogger. Он достаточно прост и не требует комментариев. К статье прилагаются все вышеописанные классы инебольшой пример, который, надеюсь, позволит более детально разобраться с использованием всех классов. Спасибо за внимание.


Автор:Игорь Гарус




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна