Рефераты. Использование платформы j2me для мобильных телефонов при организации видеонаблюдений

}

component.setStyle(style);

}

public Component getListFocusComponent (List list) {

return null;

}

}

3.3 Передача данных по Bluetooth

API для работы с Bluetooth содержится в пакете JSR-82 [9]. Эта библиотека состоит из двух пакетов: базовое Bluetooth API и OBEX.

Для работы с Bluetooth у телефона должны быть минимум 512 килобайт памяти, а также поддерживаться CLDC.

Чтобы приложение могло использовать возможности Bluetooth, необходимо реализовать интерфейс DiscoveryListener и его методы deviceDiscovered(), inquiryCompleted(), servicesDiscovered(), serviceSearchCompleted(), используемые для обнаружения рядом находящихся Bluetooth-устройств.

Далее приводится программный код (листинг 3.9), который инициирует поиск. Вначале инициализируется переменная LocalDevice local, которая представляет собой данный телефон; потом инициализируется переменная DiscoveryAgent agent. Именно этот объект запускает поиск методом startInquiry() с параметрами DiscoveryAgent.GIAC и ссылкой на объект, который реализовал интерфейс DiscoveryListener и будет обрабатывать все события, связанные с обнаружением устройств и их сервисов. Этот метод возвращает true, если поиск устройств был успешно начат, или false в противном случае.

Переменная Vector devicesFound используется для сохранения всех обнаруженных устройств.

Листинг 3.9 - Начало поиска устройств

* This method starts device discovering

*/

public void doDeviceDiscovery() {

try {

local = LocalDevice.getLocalDevice();

} catch (BluetoothStateException bse) {

Log.out.println ("EXCEPTION!" + bse.toString());

}

agent = local.getDiscoveryAgent();

devicesFound = new Vector();

try {

if (! agent.startInquiry (DiscoveryAgent.GIAC, this)) {

Log.out.println (" DISCOVERING IS NOT STARTED");

}

} catch (BluetoothStateException bse) {

Log.out.println (" BluetoothStateException "+ bse.toString());

}

}

При обнаружении Bluetooth-устройства вызывается метод deviceDiscovered(), который получает в качестве параметров найденное устройство remoteDevice и его тип deviceClass.

Далее приводится программный код (листинг 3.10) этого метода. В методе выполняется добавление в список, отображаемый на экране, доступных рядом находящихся Bluetooth-устройств. Найденное устройство также добавляется в массив devicesFound.

Листинг 3.10 - Обработка события, связанного с обнаружением нового устройства

/**

* Called when a device is discovered during device discovery

* @param remoteDevice founded device

* @param deviceClass

public void deviceDiscovered (RemoteDevice remoteDevice,

DeviceClass deviceClass) {

try {

midlet.getSelectDeviceDisplay().getDevicesList().addItem (

remoteDevice.getFriendlyName(false));

devicesFound.addElement(remoteDevice);

} catch (IOException ex) {

Log.out.println ("ex when device has been discovered "+ex.toString());

}

}

После окончания поиска всех устройств вызывается метод inquiryCompleted(), в параметре которого содержится код результата поиска. Далее приводится этот метод (листинг 3.11).

Листинг 3.11 - Завершение поиска устройств

/**

* Called when device discovering is complete

* @param - param discovering status

public void inquiryCompleted (int param) {

midlet.getSelectDeviceDisplay().removeCommand (midlet.getSelectDeviceDisplay().

getStopSearchDevices());

midlet.getSelectDeviceDisplay().addCommand (midlet.getSelectDeviceDisplay().

getBackSelectDevice());

switch (param) {

case DiscoveryListener.INQUIRY_COMPLETED:

if (devicesFound.size() > 0) {

midlet.getSelectDeviceDisplay().removeCommand (

midlet.getSelectDeviceDisplay().getStopSearchDevices());

midlet.getSelectDeviceDisplay().addCommand (

midlet.getSelectDeviceDisplay().getBackSelectDevice());

doServiceSearch((RemoteDevice) devicesFound.elementAt(0));

} else

break;

case DiscoveryListener.INQUIRY_ERROR:

 //Error during inquiry

break;

case DiscoveryListener.INQUIRY_TERMINATED:

 // Inquiry terminated by agent.cancelInquiry()

break;

}

}

62

Рисунок 3.5 - Список найденных устройств

После поиска устройств (на рисунке 3.5 показан список обнаруженных устройств) начинается поиск сервисов на одном из них. Найденные сервисы запоминаются в массиве ServiceRecord[] servicesFound. В следующем листинге 3.12 приводится метод, который начинает поиск сервисов. Для начала поиска вызывается метод searchServices() ранее созданного объекта DiscoveryAgent agent, которому передаются следующие параметры: атрибуты искомого сервиса или его UUID, удаленное устройство, на котором производить поиск, а также ссылка на объект, который будет обрабатывать все события, связанные с обнаружением сервисов.

Листинг 3.12 - Инициация поиска сервисов

/**

* This method starts service search on the divice

* @param device to be scanned for services

public void doServiceSearch (RemoteDevice device) {

* Service search will always give the default attributes:

* ServiceRecordHandle (0x0000), ServiceClassIDList (0x0001),

* ServiceRecordState (0x0002), ServiceID (0x0003) and

* ProtocolDescriptorList (0x004).

* These hex-values must be supplied through an int array

*/

int[] attributes = null; // {0x100};

/*

* Supplying UUIDs in an UUID array enables searching for

* specific services.

UUID[] uuids = new UUID[1];

uuids[0] = new UUID(0x0003);

try {

agent.searchServices (attributes, uuids, device, this);

} catch (BluetoothStateException e) {

Log.out.println ("BluetoothStateException error" + e.getMessage());

}

}

Когда поиск сервисов завершен, вызывается метод serviceSearchCompleted(), код которого приведен ниже (листинг 3.13). В параметре данного метода содержится код результата поиска сервисов.

Листинг 3.13 - Завершение поиска сервисов

/**

* Called when service search completes

* @param transID identifies a particular service search

* @param respCode indicates why the service search is ended

*/

public void serviceSearchCompleted (int transID, int respCode) {

switch (respCode) {

case DiscoveryListener.SERVICE_SEARCH_COMPLETED:

Log.out.println ("serviceSearchCompleted: SERVICE_SEARCH_COMPLETED");

if (servicesFound.length > 0) {

midlet.getSelectDeviceDisplay().addCommand (

midlet.getSelectDeviceDisplay().getSelectDeviceCommand());

}

/*

* The service to connect to has been found earlier

* (by service discovery) and the service record is

* referencedthrough the object named: service (of type

* ServiceRecord)

*/

break;

case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:

Log.out.println ("serviceSearchCompleted: SERVICE_SEARCH_DEVICE_NOT_REACHABLE");

break;

case DiscoveryListener.SERVICE_SEARCH_ERROR:

Log.out.println ("serviceSearchCompleted: SERVICE_SEARCH_ERROR");

break;

case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:

Log.out.println ("serviceSearchCompleted: SERVICE_SEARCH_NO_RECORDS");

break;

case DiscoveryListener.SERVICE_SEARCH_TERMINATED:

Log.out.println ("serviceSearchCompleted: SERVICE_SEARCH_TERMINATED");

break;

}

}

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

Листинг 3.14 - Получение URL для доступа к сервису

public String getServiceConnectionURL (int nom) {

if (nom < servicesFound.length) {

return servicesFound[nom].getConnectionURL (

ServiceRecord.NOAUTHENTICATE_NOENCRYPT,

false);

} else {

return null;

}

}

Следующий листинг 3.15 содержит код, который выполняет передачу данных. Метод sendImageViaBluetooth получает массив байт, который представляет собой изображение.

Листинг 3.15 - Отправка изображения по Bluetooth

public static void sendImageViaBluetooth (byte[] data) {

OutputStream btOutStr = null;

try {

StreamConnection conn = null;

String connectionURL = Preferences.getInstanse().getBTConnectionURL();

if (connectionURL == "") {

Log.out.println ("connectionURL is empty");

return;

}

Страницы: 1, 2, 3, 4, 5, 6, 7



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.