Журнал LinuxFormat - перейти на главную

LXF163:Средства разработки для Android

Материал из Linuxformat
Версия от 01:16, 19 октября 2018; Olkol (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


Об­ще­ние с дру­ги­ми

Программирование Свяжем ваши устройства через Bluetooth

Средства разработки для Android

[[Файл: |left |100px |thumb|Наш эксперт]] LXF111.tut_adv.jkemp.psd

Джуль­ет­та Кемп пи­шет ста­тьи для раз­лич­ных изда­­ний и ра­бо­та­ет сис­тем­ным ад­ми­ни­ст­ра­то­ром. Во вре­мя на­пи­са­ния этой ста­тьи ей при­шлось не­ма­ло по­жонг­ли­ро­вать с те­ле­фо­ном.

> По­иск спа­рен­ных и близ­ле­жа­щих уст­ройств.

Джуль­ет­та Кемп рассказывает, как Bluetooth по­мо­га­ет об­щать­ся с дру­ги­ми уст­рой­ст­ва­ми, и ­проясняет сер­вис об­ме­на со­об­ще­ния­ми.

Се­го­дня 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();

Персональные инструменты
купить
подписаться
Яндекс.Метрика