LXF163:Android: Общение с другими
Olkol (обсуждение | вклад) (Новая страница: «Категория:Постоянные рубрики Категория:Android '''Cвяжем ваши устройства через Bluetooth''…») |
Olkol (обсуждение | вклад) (→Общение с другими) |
||
Строка 7: | Строка 7: | ||
''Джульетта Кемп рассказывает, как Bluetooth помогает общаться с другими устройствами, и проясняет сервис обмена сообщениями.'' | ''Джульетта Кемп рассказывает, как Bluetooth помогает общаться с другими устройствами, и проясняет сервис обмена сообщениями.'' | ||
− | [[Файл:LXF160.code_android.expert.png |left |100px |thumb|'''Наш эксперт'''Джульетта Кемп пишет статьи для различных изданий и работает системным администратором. Во время написания этой статьи ей пришлось немало пожонглировать с телефоном.]] | + | [[Файл:LXF160.code_android.expert.png |left |100px |thumb|'''Наш эксперт''' Джульетта Кемп пишет статьи для различных изданий и работает системным администратором. Во время написания этой статьи ей пришлось немало пожонглировать с телефоном.]] |
LXF111.tut_adv.jkemp.psd | LXF111.tut_adv.jkemp.psd | ||
Версия 01:23, 19 октября 2018
|
|
|
Cвяжем ваши устройства через Bluetooth
Общение с другими
Джульетта Кемп рассказывает, как Bluetooth помогает общаться с другими устройствами, и проясняет сервис обмена сообщениями.
LXF111.tut_adv.jkemp.psd
'
> Поиск спаренных и близлежащих устройств.
Сегодня Bluetooth можно найти на любых устройствах, и с его помощью легко обмениваться данными между устройствами. На этом уроке мы напишем сервис обмена сообщениями по Bluetooth и узнаем, как обнаружить другие устройства (спаренные или нет), запустить сервер Bluetooth, отправить запрос на подключение со стороны клиента и передать данные между двумя устройствами. Отметим, что этот проект делался под Android 10 (2.3.3), но сработается и с более поздними версиями. Полный код урока можно найти на LXFDVD, но помните, что он не будет выполняться «как есть» – для компиляции в вашей локальной среде проекты Android нужно настроить либо вручную, либо в Eclipse.
Устанавливаем соединение по Bluetooth
Изменения, которые надо проделать в файле AndroidManifest.xml, описаны на нашем DVD. Для обмена данными по Bluetooth понадобятся и клиент, и сервер. Сервер слушает подключения, открыв сокет BluetoothServerSocket; клиент создает BluetoothSocket, открывает канал связи с сервером RFCOMM и отправляет запрос на соединение. Сервер принимает соединение и открывает свой BluetoothSocket. Когда оба сокета BluetoothSocket на одном и том же канале RFCOMM будут открыты, клиент и сервер подключатся друг к другу и смогут обмениваться данными.
После установки соединения сервер должен закрыть свой сокет BluetoothServerSocket, если вам не нужно поддерживать несколько соединений одновременно.
Итак, есть два варианта создания подключения:
» написать отдельные программы клиента и сервера;
» написать программу, способную вести себя и как клиент, и как сервер, и запрашивать или принимать подключение.
Второй вариант используется во многих приложениях Bluetooth; его мы и выберем. Если у вас нет двух устройств для проверки соединения, можно развернуть сервер Java на ноутбуке или ПК. По установке соединения и сервер, и клиент будут передавать и принимать данные. Поэтому наш класс BluetoothIMService будет выполнять три отдельных действия:
» слушать попытки соединения («сервер»);
» отправлять запрос на соединения («клиент»);
» обрабатывать передачу данных после установки соединения.
Эти действия будут реализованы в отдельных нитях, и мы сможем слушать соединения, не прерывая прочую активность приложений и системы.
Мы создаем и запускаем сервис следующим образом:
public class BluetoothIMService {
// Различные поля; подробности см. в коде на DVD
public BluetoothIMService(Context context, Handler h) {
adapter = BluetoothAdapter.getDefaultAdapter();
handler = h;
state = STATE_NONE;
}
public synchronized void start() {
if (connectThread != null) {connectThread.cancel(); connectThread = null;}
if (dataThread != null) {dataThread.cancel(); dataThread = null;}
setState(STATE_LISTEN);
if (acceptThread == null) {
acceptThread = new AcceptThread(true);
acceptThread.start();