Обновить
0
Денис Чувашов@Black_Shadow_86

Пользователь

Отправить сообщение

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

Конечно! Вот отформатированный текст промта для копирования в комментарий на Habr (или любой другой форум/блог). Он готов к вставке “как есть”.

**Промт для нейросети / ТЗ на Android-приложение для вардрайвинга (Wi-Fi + GPS + отправка на PHP/MySQL)**

Коллеги, прошу помощи в генерации кода. Нужно полное Android-приложение на **Java** (API 26+) со следующим функционалом. Готов принять код от нейросети или от разработчика по этому ТЗ.

## Что должно делать приложение

1. Сканировать Wi-Fi точки доступа (MAC, SSID).
2. Одновременно получать GPS-координаты.
3. Сохранять данные в локальную SQLite.
4. Отправлять накопленное на сервер (NGINX + PHP + MySQL).
5. Работать в фоне с уведомлением (Foreground Service).
6. Иметь два экрана: первый запуск (настройка) и главный (статус + лог).
7. В настройках можно менять страну/город/адрес сервера.

## Структура БД на сервере (MySQL)

```sql
CREATE TABLE `wifi_scans` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `city` VARCHAR(100) NOT NULL,
    `mac` VARCHAR(17) NOT NULL,
    `latitude` DECIMAL(10,8) NOT NULL,
    `longitude` DECIMAL(11,8) NOT NULL,
    `timestamp` BIGINT UNSIGNED NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_mac` (`mac`),
    INDEX `idx_city` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Экран первого запуска (FirstRunActivity)

Показывается один раз. Поля:

  • Страна (EditText)

  • Город (EditText)

  • IP или домен сервера (EditText, пример: 192.168.1.100 или myserver.com)

Кнопка «Сохранить и продолжить». После нажатия:

  • Сохранить в SharedPreferences

  • Запустить WifiScanService

  • Перейти на MainActivity

Главный экран (MainActivity)

Элементы сверху вниз:

  • Текстовое поле «Статус: сервер (адрес)»

  • Текстовое поле «Ожидает отправки: N»

  • Кнопка «Настройки» (открывает SettingsActivity)

  • Заголовок «Лог работы»

  • RecyclerView со списком логов (последние 50, обновление каждые 2 секунды)

Каждый лог: время (HH:MM:SS) + сообщение. Цвет текста:

  • INFO – чёрный

  • SUCCESS – зелёный

  • ERROR – красный

Экран настроек (SettingsActivity)

Полностью повторяет форму первого запуска (Страна, Город, Сервер). Кнопки:

  • Отмена (закрыть окно)

  • Сохранить (обновить SharedPreferences, перезапустить WifiScanService, закрыть окно)

Фоновый сервис (WifiScanService)

  • Foreground Service с уведомлением «Wi-Fi Scanner активен»

  • Интервал сканирования 10 секунд (жёстко в коде или из настроек)

  • Шаги каждые 10 секунд:

    1. Проверить разрешения (ACCESS_FINE_LOCATION)

    2. Включить Wi-Fi, если выключен

    3. wifiManager.startScan()

    4. Получить ScanResults

    5. Получить последнюю GPS-координату (LocationManager.GPS_PROVIDER)

    6. Если GPS = null — пропустить сканирование, записать в лог «Нет GPS сигнала»

    7. Для каждого ScanResult сохранить в локальную БД (таблица wifi_cache): MAC, SSID, latitude, longitude, timestamp, страна, город

    8. Записать в лог «Сохранено X сетей»

    9. Запустить UploadManager.tryUpload()

UploadManager

  • Отдельный поток (Executors)

  • Берёт из wifi_cache до 50 записей (getUnsentRecords)

  • Формирует JSON:

[{"city":"Moscow","mac":"AA:BB:CC:DD:EE:FF","latitude":55.7558,"longitude":37.6176,"timestamp":1734567890000}]
  • Отправляет POST на URL: {сервер}/api/upload_wifi.php

  • Заголовки: Content-Type: application/json, X-API-Key: your_secret_api_key_here

  • При HTTP 200 — удаляет отправленные записи из локальной БД

  • При ошибке — оставляет для следующей попытки

  • Логирует результат (успех / ошибка)

Локальная БД (DatabaseHelper)

Таблица wifi_cache

  • id (INTEGER PRIMARY KEY)

  • mac (TEXT)

  • ssid (TEXT)

  • latitude (REAL)

  • longitude (REAL)

  • timestamp (INTEGER)

  • country (TEXT)

  • city (TEXT)

Таблица logs

  • id (INTEGER PRIMARY KEY)

  • message (TEXT)

  • type (TEXT)

  • timestamp (INTEGER)

Методы

  • addWifiRecord(WifiRecord)

  • List getUnsentRecords(int limit)

  • deleteRecords(List)

  • addLog(String message, String type)

  • List getRecentLogs(int limit)

  • int getPendingCount()

Модели

WifiRecord(String mac, String ssid, double lat, double lng, long timestamp, String country, String city)
ScanLog(String message, String type, long timestamp) // + геттеры

PreferencesManager

SharedPreferences:

  • country

  • city

  • server_url

  • is_first_run (boolean)

  • scan_interval (int, секунды, опционально)

  • upload_batch_size (int, опционально)

Методы: set/get для каждого, hasAllSettings()

PHP-скрипт (сервер)

Файл: /api/upload_wifi.php

Логика:

  1. Проверить метод POST

  2. Проверить заголовок X-API-Key

  3. Прочитать JSON из php://input

  4. Подключиться к MySQL

  5. Для каждой записи выполнить INSERT IGNORE (или ON DUPLICATE KEY UPDATE)

  6. Вернуть JSON: {"success": N, "total": M, "errors": []}

Разрешения в AndroidManifest.xml

  • ACCESS_FINE_LOCATION

  • ACCESS_COARSE_LOCATION

  • ACCESS_WIFI_STATE

  • CHANGE_WIFI_STATE

  • INTERNET

  • FOREGROUND_SERVICE

  • WAKE_LOCK

  • ACCESS_BACKGROUND_LOCATION

Технические требования

  • Язык: Java (не Kotlin)

  • minSdk: 26 (Android 8.0)

  • targetSdk: 33 или 34

  • Зависимости в build.gradle: appcompat, material, recyclerview

  • Весь код должен компилироваться в Android Studio без ошибок

Желательно

  • START_STICKY для сервиса

  • Лог хранить последние 500 записей (автоочистка старых)

  • При изменении настроек — сервис перезапускается с новыми параметрами

  • Обработка отсутствия GPS (не сохранять, писать в лог)

Что нужно получить на выходе

Полный архив проекта Android Studio:

  • Все .java файлы по пакетам

  • Все .xml layouts (activity_first_run, activity_main, activity_settings, item_log)

  • AndroidManifest.xml

  • build.gradle (app level)

  • PHP-скрипт upload_wifi.php

Промт для нейросети. ЯП Java Код должен быть готов к копипасте и сборке. Спасибо!

Приложение для мобилки интересная тема. Надо бы собрать. Сканить эфир, собирать MAC + геотеги и отправлять на свой сервер. Займусь пожалуй на досуге, всё для этого есть.

У меня был проект WiFi на транспорте в г.Томск. Я собирал мак адреса сканируя эфир WiFi роутерами и скалдывал в БД. Позднее сделал систему отслеживания автобусов по радиоэфиру, и прикрутил к 2гис. Это не бесполезное занятие, а просто не дооценённая идея до которой еще не дошли массы. Если дело в экономике и дальше так пойдёт, то глонасс скорее всего прикажет долго жить, потребуются альтернативы, и ваши труды не пропадут даром, можете не сомневаться. Там человек выше советовал ESP32-c5, вполне дельное замечание. Если перенесёте проект на эту платформу, и дадите гитхаб ссылку, буду признателен.

О! Я тут как раз этим вопросом озадачиваюсь в своих изысканиях: https://wi-fi.seversk.ru/TriTon.html Исходники лежат тут: https://github.com/den4ik86/TriTon/blob/main/TriTon.html Я написал статью про свои наработки, но пока не прошла модерацию. Хотелось бы из симулятора сделать прикладное приложение для планирования и развёртывания Wi-Fi сетей. Хочу добавить в симулятора работу с направленные антеннами, возможность интеграции с 2gis или другими картами. Одному такое сделать наверное будет сложно, поэтому если есть у кого то желание поучаствовать, то буду рад пулреквестам и живому общению, касаемо данной темы.

Во, брат по разуму. Тоже хотел написать автору что можно OpenWRT свою собрать со всем необходимым под эту задачу.

Вы хорошо знакомы с Openwrt? Если нет то очень рекомендую пощупать.

Пересекался с router OS места для фантазии мало… Я имею в виду стоковый софт говно, железо огонь!

Ну раз есть локалка то каким то шлюзом это дело шевелится, скорее всего у Вас там микрот какой нибудь стоит, ну или что нибудь под Фяхой или Линухой. Если Микрот то Openwrt, в двух последних случаях так же есть проги для работы с Magic package. Под Wrt есть Mqtt брокер, которого можно дополнить микрокотроллерами, какими нибудь ESP32 с wifi модулем на борту. А покупать целый одноплатник чтоб просто "кнопочку" дергать, расточительно. Не спорь с папой, папа знает =) .

Бро, нафиг так наворочено!? Береш роутер, ставиш openwrt ставиш пакет WOL, на компе настраиваем wake on lan, и радуемся жизни.

Наличие высшего образования хороший +, только то что выходит сейчас из вузов… ТУСУР — в Ваш огород камень!

Я своего малого учу так, сам раскопаю интересующую тему, скину ссылки ребёнку в телегу. Набрасываю базу в коде, и так же отдаю ему, позже ставлю конкретную задачу.

Как по мне, так многие сайтоделатели страдают только одним изъяном — напихать кучу переделок и свистелок в свои проекты, причём убогого качества. Посмотрите на эти уродливые зарисовки от яндекс где они свои курсы толкают, это же просто трэшак, я бы под грибами до такого не допер. Или на сайты с адоптацией через bootstrap посмотреть, ну куда же было лучше когда была отдельная страница для мобилки и для компа, с телефона это просто вызывает раздражение вплоть до нервного срыва, неужели не ясно что js на мобиле и компе работает с разной скоростью? Я не противник js, и даже больше, js необходимый инструмент для создания современного веб приложения, но когда его слишком много это становится не продуктом, а куском говна. Интерфейс должен быть лаконичный, с интуитивно понятными элементами управления, подписями. Вполне удачным интерфейсом я считаю концепцию иконок как в ios, Android. Мне до сих пор не ясно почему сайтоделы не перенимают этот опыт. Из программ для ПК считаю дебильным интерфейс VS code и некоторых других продуктов от маек, где пиктограммы слабо отражают функционал элемента (простые текстовые подписи очень не мешали бы). Это моё личное оценочное мнение, не претендую на истину в последней инстанции, но реально бесит что сейчас люди делают топорные, тормозные и совершенно непонятные интерфейсы.

CAN скоро сдохнет, ethernet наше всё.

Информация

В рейтинге
Не участвует
Откуда
Северск, Томская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик мобильных приложений, Инженер встраиваемых систем
Старший
От 250 000 ₽
SQL
Java
PHP
Linux
Bash
C