Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
15.41 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

Рис. 2. Многообразие APT по версии «Лаборатории Касперского»

Теперь создадим интерфейс HTTP-запроса, а затем сформируем объект класса Retrofit, в котором будет все необходимое для обращения к C&C-серверу:

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

Как видишь, Retrofit сильно упрощает создание сетевых запросов. Мы уже писали про него в статье о библиотеках, рекомендую тебе ее пролистать.

Если C&C жив и ответит нам, будет вызван метод onResponse, в котором через метод body() будет доступен объект класса PingRequest. О доступности сервера мы оповестим Presenter с помощью паттерна «Наблюдатель»: методы setChanged и notifyObservers отправят сообщения подписанным на networkFunc объектам.

ПРОВЕРКА СЕТЕВОГО СОЕДИНЕНИЯ

Теперь еще рассмотрим момент, который незначителен для стационарных систем, но важен при работе с мобильными устройствами. Как рядовой пользователь определяет, что с устройством что-то не так? Аппарат либо тормозит, либо быстро разряжается. Задержки в работе устройства лечатся рефакторингом кода, а сейчас разберемся, как лишний раз не выполнять ресурсозатратные операции.

Перед отправкой данных проверим, есть ли в данный момент у устройства доступ в интернет. Для этого нальем кода в уже объявленный метод isInternetAvail. В Android есть класс ConnectivityManager, который предоставит нам информацию о состоянии сети на устройстве:

Поскольку нам мало просто знать, что сеть имеется, вызовем метод getActiveInfo() и перебором выясним, какого качества подключение сейчас

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

доступно. К примеру, можно запускать передачу файлов, только если доступ-

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на Wi-Fi-сеть или LTE.

ОТПРАВКА ДАННЫХ

В отчете компании Trend Micro подробно рассказано о том, как в сетевом трафике заметить активность вредоносов. APT Taidoor и IXESHE используют GET-запросы, а Enfal в некоторых случаях отправляет данные через POST. Это вполне логичная модель взаимодействия в современных приложениях: в сети, к которой подключен пользователь, всегда будет доступ к веб-ресурсам, а остальные порты вполне могут быть закрыты.

Еще одна APT под названием СozyDuke, согласно отчету «Лаборатории Касперского», отправляет данные на сервер, меняя значения переменных в адресе запроса на C&C. В теле такой малвари изначально зашит

адрес скрипта на C&C, к которому будет осуществляться запрос, к примеру вот такой:

209.200.83.43/ajax/search.php

Затем, в зависимости от ситуации, к скрипту подставляются значения различных переменных: status=, name= и так далее. По сформированному адресу отправляется POST-за- прос, в тело которого могут быть добавлены дополнительные данные.

Применим на практике подход создателей CozyDuke, но всю полезную нагрузку поместим в тело запроса. Поскольку при нестабильной мобильной связи проблематично в одной сессии отправить файл более одного мегабай-

INFO

Корпоративная почта, мобильные версии офисных программ — все готово для того, чтобы коммерческая тайна оказалась

и на устройствах на базе Android!

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

та, будем разбивать передачу файлов на несколько сеансов связи. Для этого введем переменные с именем файла (filename), номером передаваемой части (partOffset) и содержимым (filePart).

Передавать файл частями возможно благодаря классу FileInputStream. Он позволяет считать кусок файла по указанному смещению в массив байтов:

Объявленный ранее метод sendData примет на вход все три параметра, а затем сформирует запрос к C&C. Строить сетевое взаимодействие будем с помощью Retrofit, для этого нужно будет только указать адрес запроса, сформировать заголовок и указать объект, который будет телом:

ТеперьнадосоздатьобъектнаосноведанныхизфайлаипередатьеговRetrofit, дальше библиотека сама добавит нужные параметры и отошлет запрос:

Нам потребуется опять использовать паттерн «Наблюдатель». Дело в том, что Retrofit не умеет создавать очередь из нескольких запросов: после формирования запроса сразу создается новый поток и данные отправляются в сеть. Это неудобно, поскольку файл может быть разбит на приличное число фрагментов, а создавшее с сотню потоков приложение, скорее всего, исчерпает выделенную ей память и будет принудительно завершено системой.

В Presenter будет вызван метод onUpdate, что будет означать удачную доставку

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

части файла к серверу, а значит, можно снова вызывать sendData со следую-

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щей частью файла.

Рис. 3. Так запрос выглядит в Wireshark

ДЕКОДИРОВАНИЕ

Похожим образом можно также и загружать файлы с сервера на устройство. Целей может быть много: от обновлений до подмены данных на устройстве. Согласно спецификации JSON, массив байтов будет представлен массивом переменных. К примеру, заголовок JPG-файла будет выглядеть вот так:

Получить массив байтов возможно с помощью несложного цикла:

РАБОТА БУДЕТ!

Мир угроз расширяется так же быстро, как и новые технологии проникают в нашу жизнь. При этом самообразование очень многих зачастую останавливается, практически не начавшись, чем и пользуются злоумышленники.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

Вредоносное ПО интересно с точки зрения использования новых технологий и социальной инженерии. Для лучшего понимания статьи на нашем сайте ты найдешь исходники созданного сегодня приложения. Мы много пишем о вирусах, но хотим, чтобы полученные знания ты применял только в легальных проектах, и ждем от тебя полезных приложений в Google Play. Удачи!

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОДИНГ

 

 

 

df-xchan

 

 

 

w Click

to

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

УЛЫБАЙТЕСЬ,ВАС СНИМАЕТANDROID

СОЗДАЕМ СЕРВИС ДЛЯ СКРЫТОЙ СЪЕМКИ НА СОВРЕМЕННОМ ANDROID API

Андрей Пахомов mailforpahomov@gmail.com

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ИНТРО

Мир Android развивается очень бурно, и мы, разработчики, имеем счастье каждый день узнавать что-то новое

итем самым становиться лучше. Технологии, которые были передовыми год назад, уже могут быть не так эффективны. К примеру, начиная с API версии 21 был введен новый класс Camera2, предоставляющий возможность управлять камерой. Старому классу Camera присвоен статус deprecated: это значит, что он все еще доступен для использования, но уже очень скоро его исключат

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

КОНВЕЙЕР КАК КОНЦЕПЦИЯ

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

WARNING

Вся информация предоставлена исключительно

вознакомительных целях. Ни редакция, ни автор

не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Паттерн pipeline и класс Camera2

Хоть названия классов и схожи, концепция работы серьезно изменилась. Модель работы камеры представлена в виде конвейера (pipeline). Это паттерн ООП, который предполагает использование многопоточной разработки с целью последовательного преобразования объекта, выводимого как конечный результат. В нашем случае мы подключаемся к камере, задаем параметры

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

съемки и получателя сформированного изображения. Камера — это физический объект, поэтому для повышения производительности и экономии ресурсов устройства целесообразно все вычисления возложить на дополнительные потоки. Сейчас ты увидишь, что это не только не страшно, но и полезно! :)

МАХМУД, ПОДЖИГАЙ! (С)

Настало время применить на практике новый API. Интересно будет разобраться, как теперь решается одна из наших любимых задач: создать приложение, которое в фоне может делать фотографии без ведома пользователя.

Как обычно в Android, начнем мы с добавления пермишенов в мани- фест-файл. Сегодня нам нужен доступ к камере.

Основную работу начнем с получения доступа к камерам на нашем устройстве, в этом нам поможет класс CameraManager. Это менеджер системного сервиса, который позволяет найти доступные камеры, подсоединиться к любой из них и задать для нее настройки съемки.

Вообще, максимально широкое использование многопоточности — это тренд современной разработки под Android. Работа с сетью, физическими датчиками на устройстве, обработка полученной информации — это все очень ресурсозатратные и часто долговременные операции. Порождение дополнительных потоков позволяет не только по максимуму использовать все ресурсы аппарата (все современные мобильные устройства обладают многоядерными процессорами), но и создать у пользователя ощущение «легкости»: в основном потоке ведется только отображение элементов интерфейса.

Формирование картинки начнем с создания новых потоков и обработчиков событий. Сперва создадим новый поток, который будет висеть в фоне и ждать команды на выполнение какой-либо операции. Он будет нам полезен при задании настроек камеры и передаче картинки между объектами.

Камера — довольно сложное и не самое быстро реагирующее физическое устройство. По сравнению с вычислениями в памяти устройства перевод каме-

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

ры из состояния в состояние может занимать целую вечность. Поэтому операции с камерой будут выполняться вне главного потока, а изменения состояния камеры мы будем отлавливать с помощью обработчиков событий. К примеру, инициализируем в нашем приложении объект CameraDevice.StateCallback, один из методов которого будет вызван после того, как на устройстве откроется камера.

Еще нам потребуется отслеживать тот момент, когда нам станет доступна картинка, снятая камерой. Организация передачи картинки с камеры другим объектам — довольно ресурсозатратный процесс, поэтому он тоже будет выполняться в фоне. Для этого существует объект CameraCaptureSession. CaptureCallback, его метод onCaptureCompleted будет вызван после захвата камерой изображения.

Теперь определимся, как мы будем обрабатывать полученное изображение. Сформированное с помощью класса CameraCaptureSession изображение будет доступно в виде объекта Surface. Это обертка для фотографий, сделанных с помощью класса Camera2. Специально для работы с ним создан класс ImageReader. Воспользуемся интерфейсом ImageReader. OnImageAvailableListener, метод onImageAvailable в созданном объекте будет вызван сразу, как только картинка станет доступна.

ФОТОГРАФИРУЕМ

Для начала нужно определиться, с какой именно камеры мы будем снимать данные, ведь на устройстве их может быть несколько. У каждой камеры есть уникальный идентификатор, организуем небольшой пере-

Соседние файлы в папке журнал хакер