Практические задания
0. Ведение Git-репозитория (требования)
Зарегистрироваться на
Github
(или аналоги);Создать ОДИН репозиторий под
Android
-проект;НИКОГДА не менять или создавать новый репозиторий при возникших проблемах с
commit
,push
;Репозиторий должен содержать 1 (ОДНУ) основную ветку, если не противоречит заданиюж;
На
Git
-репозиторий загружать весьAndroid
-проект, НЕ просто файлы с*.kt
или*.xml
;Сгенерировать SSH-ключ на вашем устройстве, привязать ключ к профилю в
Github.com
;Рекомендуется добавить проверочную фразу к ключу;
Выполнить первый
commit
с обновленным README.MD, где будут указана информация о Вас (ФИО, № группы).
1. Основы ООП. “Ходячий”
Создать проект в
Intellij Idea
с названием вашего репозитория наGithub
, либо создать проект внутри директории, если вы уже связали репозиторий наGithub
с локальным на вашей машине;Создвать новую ветку в вашем
Git-проекте
с названием практического задания;В созданном проекте, по умолчанию будет создан
sample code
, в котором и будет продолжаться дальнейшая работа;Создать Класс
Human
, с свойствами:ФИО
,Возраст
,Текущая скорость
;Класс должен содержать методы: конструктор со всеми свойствами, метод
move()
, геттеры и сеттеры свойств класса;Метод
move()
должен реализовать один из методов моделирования движений (в Картезианской системе координат): Random Walk, Gauss-Markov Mobility Model;В функции
main()
создать массив из экземпляров (количество зависит от вашего номер в списке группы) классаHuman()
, задать время “симуляции” (на свое усмотрение, в секундах), где в основном цикле “времени” заствить каждого Human ходить;Сделать коммит (один или несколько) и обновить в удаленном репозитории (git push);
Слить текущую ветку в “основную\стартовую” после проверки преподавателем;
В файле Readme.md описать (с формулами) принцип работы модели движения, выбранной в пункте 6.
2. Наследование.
Создать новую ветку Вашего проекта, в которой будет выполняться практическая работа;
В качестве нового функционала добавить класс-наследник
Driver()
, который должен наследовать некоторые свойства (на ваше усмотрение) классаHuman()
;Движение объектов (экземпляров) класса
Driver
должно быть прямолинейным (необходимо переопределить функциюmove()
родительского класса);В основной фукнции
main()
создать (2-4 объектаHuman
и 1 объектDirve
);В методе
move()
реализовать параллельное движение каждого из объектов, созданных ранее; ИспользуемThread
;Сделать
commit
,push
;Слить ветку в
main
.
Почитать дома:
3. Интерфейсы.
Создать новую ветку для реализации “интерфейса”;
Создать интерфейс
Movable
с шаблонамисвойств
(координаты, скорость и т.д.) иметодов
(методmove()
), необходимых для реализации движения объектов;Провести рефакторинг текущей кодовой базы, в частности:
Разделить классы\интерфейсы на файлы (1 класс = 1 файл);
Обновить описание проекта в README.md с информацией по каждому файлу.
Обновить удаленный репозиторий.
Почитать дома:
Android
4. Разработка простейшего калькулятора
Разработать простую версию калькулятора, используя TextView
, Button
и обработчик нажатия (onClickListener
).
Требования к “калькулятору”:
Калькулятор должен состояить из кнопок циферблата (от
0
до9
);Должен включать в состав
Layout
кнопки “действий” (+
,-
,*
,/
,=
);Должен включать в состав
TextView
для отображения результата нажатия наButton
’s из пунктов 1 и 2.При нажатии на
=
необходимо обработать строку изTextView
вручную и выполнить записанные в строку операции;Достаточно обработки одной операции, нет необходимости обработки нескольких операций.
Результата отправить на Github (или аналоги) - репозиторий.
5. Разработать MediaPlayer для воспроизведения музыки
Цель: Научиться работать с файлами внутренней (или внешней) памяти смартфона, в частности, со звуковыми “дорожками”. Исползование класса MediaPlayer
поможет в создании “каркаса” для MP3-проигрователя.
Создать новое
Activity
для работы сMediaPlayer
;MediaPlayer должен поддерживать функции: воспроизведение текущего трека, пауза текущего трека, обработка перехода
Activity
в состояниеonPause()
, регулировка громкости,SeekBar
для отображения текущей длительности трека и его движение, перемотка трека (при помощиSeekBar
);Возможность вопроизводить музыку из хранилища телефона при помощи Permission, строки 41-53;
Важно реализовать проверку текущего файла на директорию (
isDirectory
);Отображение списка треков на экране
Activity
.
6. Местоположение смартфона. Location
Цель: получить доступ к данным о местоположении Android-телефона и вывести на экран значения.
Создать
Activity
Location, в основном окнеMainActivity
добавить кнопку перехода в новую ‘Activity’;Получить доступ к классу Location при помощи permissions:
ACCESS_FINE_LOCATION
,ACCESS_COARSE_LOCATION
;Вывести в
Activity
данные о текущем (или последнем известном) местоположении смартфона:Получить данные можно при помощи метода getLastLocation()
При каждом обновлении местоположения записывать данные в файл (лучше в формате
Json
);ДОП. БАЛЛЫ. Обернуть получение местоположения смартфона в сервис с целью записывать данные о местоположении в
backgroud
-режиме (когда приложение закрыто,activity
не видно пользователю).
7. Данные о сетях мобильной связи (2G, 3G, 4G-LTE, 5G-NR)
Создать новое
Activity
, добавив кнопку перехода основном “окне”MainActivity
;При помощи класса
Telephony
;
8. Реализация клиент-серверного приложения (Python\clang)
Создать новый репозиторий в профиле
github
(для backend-сервера);В созданный репозиторий добавить Ваш проект
Android'a
какsubmodule
;В корне репозитория создать папку
examples/
, где будут находится примеры работы клиент-серверного приложения;Создать 2 файла:
client.py
,server.py
;Реализовать передачу данных (можно просто “Hello World!”) от клиента к серверу и обратно;
Посмотреть результат работы приложений в программе Wireshark, найти переданные сообщения;
Добавить еще один файл в
examples/
:client.c
илиserver.c
;Реализовать соединение и передачу данных между примером на языке
Python
и примером на языкеСИ
;git commit
&&git push
.
9. Работа с сокетами (ZMQ). Передача данных от Android к PC
На базе примера реализовать передачу данных внутри приложения
Android
(ваш предыдущий проект);Создать новое
Activity
, в котором будет реализованы функцииклиента
исервера
;Реализовать начало передачу данных между сервером и клиентом при нажатии на кнопку (создать новую кнопку);
Новый функционал должен находится в отдельной (от основной) ветке (создаем новую ветку (
branch
));
Наладить передачу данных от Вашего приложения (Android) на приложение-сервер на Вашем компьютере (или VPS, если имеется):
Сервер
(компьютер) - запустить серверную часть на базе языкаPython
+ZMQ
;Android
- выступает в роли клиента (на базеZMQ
), подключается к серверу;Ваш компьютер и телефон (
Android
) должны находится в одной сети (Wifi, USB, Internet (если есть белыйip
-адрес));В роли данных со стороны
Android
-приложения выступает строка"Hello from Andorid!"
;Данные со стороны сервера -
"Hello from Server!"
;Серверная
часть ДОЛЖНА сохранить (в файл) каждый блок данных, пришедший со смартфона, и считать количество полученных пакетов.Серверная часть также должны иметь метод\функцию по выводу на экран (консоль) всех сохраненных данных;
Git
:Android
- Сделать c merge request с новым функционалом;Server
- добавить новый коммит, обновить удаленный репозиторий.
10. Сериализация. Data-классы. Формирование JSON.
В приложении
Android
,Desktop-сервере
сформировать Data-классы для данных, которые будем передавать с между приложениями. Список данных:Location: Latitude, Longitude, Altitude, Timestamp, Speed, Accuracy;
CellInfoLte: CellIdentityLte, CellSignalStrengthLte;
CellIdentityLte: Band, CellIdentity, EARFCN, MCC, MNC, PCI, TAC;
CellSignalStrengthLte: ASU Level, CQI, RSRP, RSRQ, RSSI, RSSNR, Timing Advance;
CellInfoGsm: CellIdentityGSM, CellSignalStrengthGsm;
CellIdentityGSM: CellIdentity, BSIC, ARFCN, LAC, MCC, MNC, PSC;
CellSignalStrengthGsm: Dbm, RSSI, Timing Advance;
CellInfoNr: CellIdentityNr, CellSignalStrengthNr
CellIdentityNr: Band, NCI, PCI, Nrargcn, TAC, MCC, MNC;
CellSignalStrengthNr: SS-RSRP, SS-RSRQ, SS-SINR, Timing Advance;
Заполнить каждый
Data-класс
актуальными данными с мобильного телефона (Пр. №3
,Пр. №4
);Реализовать Serialization и преобразование в
Json
, созданных вами классов:Структура на передачу ДОЛЖНА состоять из
Location
и одним из (или несколько, если позволяет производитель смартфона) объектовCellInfo
(GSM
илиLTE
илиNR
);
С заранее заданной периодичностью (допустим,
1 секунда
) передавать, сформированную структуруJson
, с мобильного устройства на сервер.На стороне сервера получать данные, выводить в терминал и сохранять данные в файл;