Напишем запрос к ИИ для генерирования полного Java кода проекта для Android Studio - ВИДЕОРЕГИСТРАТОР для Android смартфона
AI-powered Code Generation
https://oflameron.ru/Valery_Shmelev_5eng.pdf
Технически корректно оформленный запрос для ИИ-модели Qwen, с явным указанием всех требуемых переменных, методов, параметров, разрешений и особенностей программирования:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Запрос для генерации Android-приложения (Java, Android 14):
Сгенерируй полный, минимальный и рабочий исходный код Android-приложения на Java для Android Studio, соответствующий следующим техническим требованиям:
Общие требования:
- compileSdkVersion = 34
- targetSdkVersion = 34
- minSdkVersion ≥ 24 (достаточно для MediaRecorder и TextureView)
- Название приложения (application label): `VRecorder OFLAMERON`
- Заголовок MainActivity в ActionBar: `"OFLAMERON videorecorder v1"`
- Material Design 3 не используется — UI реализуется с использованием базовых View-компонентов (`Button`, `TextureView` и т.д.)
- Ориентация приложения фиксирована: только `landscape` (в манифесте `android:screenOrientation="landscape"`), все UI-элементы сохраняют своё положение и размер при физическом повороте устройства.
Разрешения:
В `AndroidManifest.xml` должны быть объявлены следующие разрешения:
xml
Начиная с Android 13 (API 33), для записи в папку `Download` требуется `MANAGE_EXTERNAL_STORAGE` ИЛИ использование MediaStore API с разрешением на запись медиа. Однако, учитывая `targetSdk=34`, используй MediaStore API и запрашивай разрешения `READ_MEDIA_VIDEO` и `READ_MEDIA_IMAGES`. Для записи в папку `Downloads` без `MANAGE_EXTERNAL_STORAGE`, используй `MediaStore.Downloads.EXTERNAL_CONTENT_URI`.
Однако, для упрощения и совместимости, разрешения запрашиваются динамически в коде:
- `Manifest.permission.CAMERA`
- `Manifest.permission.RECORD_AUDIO`
- `Manifest.permission.READ_MEDIA_VIDEO` (для Android 13+)
- Для Android ≤12 — `Manifest.permission.WRITE_EXTERNAL_STORAGE` и `READ_EXTERNAL_STORAGE`
Основные компоненты UI:
- `TextureView textureView` — для предпросмотра видеопотока с камеры.
- Занимает 70% ширины и 70% высоты экрана (относительно landscape-ориентации).
- Привязан к landscape-размерам; не масштабируется при повороте (ориентация фиксирована).
- Две кнопки справа, вертикально друг над другом:
- `Button btnRun`: изначальный `text = "START"`; при активации записи меняется на `"STOP"`; при остановке — обратно на `"START"`.
- `Button btnExit`: `text = "EXIT"`; по нажатию выполняется корректное завершение.
Логика работы:
- При старте приложения проверяются и запрашиваются все необходимые разрешения.
- После получения разрешений инициализируется тыльная камера (`Camera2 API` или упрощённый `Camera1`, но предпочтительно Camera2).
- Экран не гаснет во время работы камеры:
Используется флаг `WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON` при активации `btnRun`, и снимается при остановке или выходе.
- При нажатии `btnRun`:
- Если камера неактивна → запускается предпросмотр + начинается запись через `MediaRecorder`.
- Запись ведётся в файлы в папке Downloads, с именами:
- `"00001.mp4"`
- `"00002.mp4"`
- `"00003.mp4"`
- Каждый файл записывается максимум 2 минуты (120 000 мс).
- После завершения записи в текущий файл:
- `MediaRecorder` останавливается и пересоздаётся.
- Следующий файл выбирается по циклическому порядку.
- После завершения `00003.mp4` → удаляется файл `00001.mp4` → начинается запись снова в `00001.mp4`.
- Удаление файла: `ContentResolver.delete()` при использовании MediaStore.
- При нажатии `btnExit`:
1. Если идёт запись → остановить `MediaRecorder`, освободить ресурсы.
2. Остановить предпросмотр (`TextureView`), освободить `CameraDevice`.
3. Снять флаг `FLAG_KEEP_SCREEN_ON`.
4. Восстановить поведение экрана по умолчанию (системное).
5. Вызвать `finish()` для завершения `Activity`.
Переменные и методы (в MainActivity):
- Поля класса:
java
private TextureView textureView;
private Button btnRun, btnExit;
private CameraDevice cameraDevice;
private CameraCaptureSession cameraSession;
private MediaRecorder mediaRecorder;
private String currentVideoFileName = "00001.mp4";
private int currentFileIndex = 0; // 0 → 00001, 1 → 00002, 2 → 00003
private static final String[] VIDEO_FILE_NAMES = {"00001.mp4", "00002.mp4", "00003.mp4"};
private Handler recordingHandler = new Handler(Looper.getMainLooper());
private Runnable recordingTimeoutRunnable;
private boolean isRecording = false;
private boolean isPreviewing = false;
- Ключевые методы:
- `requestPermissionsIfNecessary()` — запрашивает разрешения.
- `startCameraPreview()` — настраивает `TextureView` и открывает тыльную камеру.
- `startRecording()` — инициализирует `MediaRecorder`, создаёт URI через `MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)`, запускает запись.
- `stopRecording()` — останавливает `MediaRecorder`, удаляет старый файл (если нужно), сбрасывает состояние.
- `scheduleNextRecording()` — устанавливает `Handler.postDelayed()` на 120 000 мс для автоматического переключения файла.
- `toggleScreenOn(boolean keepOn)` — управляет `FLAG_KEEP_SCREEN_ON`.
- `cleanupAndExit()` — вызывается из `btnExit.setOnClickListener`.
Ограничения:
- Не использовать фрагменты, ViewModel, LiveData — только `AppCompatActivity` с базовым жизненным циклом.
- Весь код — в одном файле `MainActivity.java`.
- Не использовать Kotlin, только Java.
- Не использовать ViewBinding или DataBinding — только `findViewById`.
- В `build.gradle (Module: app)` указать:
gradle
android {
compileSdk 34
defaultConfig {
targetSdk 34
minSdk 24
}
}
Авторство:
В коде должна присутствовать комментарий:
// (c) by Valery Shmelev https://t.me/s/llmsource/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Этот запрос содержит все необходимые технические детали для однозначной генерации корректного Android-приложения с учётом ограничений Android 14.
https://t.me/llmsource/
https://3cbb9b3d.pinit.eth.limo/
https://llmproject.livejournal.com/
https://pixelfed.ru/p/Jettman/928717775752456493
https://pixelfed.ru/p/Jettman/928927730038447227
https://oflameron.myfilebase.site/
https://telegra.ph/Oflameron-01-30
https://telegra.ph/Kripto-programmirovanie-Oflameron-01-29
https://androidjavaopensource.blogspot.com/
https://studio.youtube.com/channel/UCFmbkFiEg2AwQ_UAonuQERQ
https://tgstat.ru/channel/@llmsource
https://telegra.ph/Web-Site-07-03
https://github.com/vallshmeleff/oflameron-obfuscation-language
https://proposed-gray-cattle.myfilebase.com/ipfs/QmXMVBgdZez4VfeKpoKKfSJ3j1oVfTHztmnvC2oYNSoz3x