Иностранный язык с ИИ: Languages Prompts
Запрос на генерирование приложения для работы с видеокамерой смартфона для ИИ Deepseek
Сгенерируй самый простой полный код Android 10 JAVA приложения для Android Studio. Не использовать Material Design 3 Приложение должно получать разрешение у пользователя на использование камеры. Приложение должно получать видеоизображение с тыльной камеры. Приложение должно работать в Landscape ориентации. Видео-изображение с камеры должно транслироваться в TextureView TextureView должно занимать 70% размера экрана смартфона. Трансляция видео должна включаться/останавливаться по нажатию кнопки RUN
Java Code Generation
Ответ:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.simplecamera">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="Simple Camera"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:screenOrientation="landscape"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Java Code Generation
MainActivity.java
package com.example.simplecamera; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.util.Log; import android.util.Size; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.Arrays; public class MainActivity extends AppCompatActivity { private static final String TAG = "SimpleCamera"; private static final int CAMERA_REQUEST_CODE = 101; private TextureView textureView; private Button btnControl; private boolean isRunning = false; private CameraManager cameraManager; private CameraDevice cameraDevice; private CameraCaptureSession captureSession; private CaptureRequest.Builder previewBuilder; private HandlerThread backgroundThread; private Handler backgroundHandler; private String cameraId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Инициализация UI textureView = findViewById(R.id.textureView); btnControl = findViewById(R.id.btnControl); cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); // Настройка TextureView textureView.setSurfaceTextureListener(textureListener); // Обработчик кнопки btnControl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (checkPermission()) { toggleCamera(); } else { requestPermission(); } } }); } private boolean checkPermission() { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; } private void requestPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == CAMERA_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Camera permission required", Toast.LENGTH_SHORT).show(); } } } private void toggleCamera() { if (isRunning) { stopCamera(); btnControl.setText("START"); } else { startCamera(); btnControl.setText("STOP"); } isRunning = !isRunning; } private void startCamera() { startBackgroundThread(); if (textureView.isAvailable()) { openCamera(); } } private void stopCamera() { closeCamera(); stopBackgroundThread(); } private void openCamera() { try { if (!checkPermission()) { Toast.makeText(this, "No camera permission", Toast.LENGTH_SHORT).show(); return; } // Находим тыльную камеру for (String id : cameraManager.getCameraIdList()) { CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(id); Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING); if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) { cameraId = id; break; } } if (cameraId == null) { Toast.makeText(this, "No back camera found", Toast.LENGTH_SHORT).show(); return; } cameraManager.openCamera(cameraId, cameraCallback, backgroundHandler); } catch (CameraAccessException e) { Log.e(TAG, "Open camera error", e); } } private void closeCamera() { if (captureSession != null) { captureSession.close(); captureSession = null; } if (cameraDevice != null) { cameraDevice.close(); cameraDevice = null; } } private TextureView.SurfaceTextureListener textureListener = new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { if (isRunning) { openCamera(); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { // Nothing to do } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { // Nothing to do } }; private CameraDevice.StateCallback cameraCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { cameraDevice = camera; startPreview(); } @Override public void onDisconnected(CameraDevice camera) { cameraDevice.close(); cameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { cameraDevice.close(); cameraDevice = null; Toast.makeText(MainActivity.this, "Camera error: " + error, Toast.LENGTH_SHORT).show(); } }; private void startPreview() { try { SurfaceTexture texture = textureView.getSurfaceTexture(); // Получаем доступные размеры CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId); StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); Size[] sizes = map.getOutputSizes(SurfaceTexture.class); Size previewSize = sizes[0]; // Берем первый доступный размер texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); Surface surface = new Surface(texture); previewBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); previewBuilder.addTarget(surface); cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { captureSession = session; try { captureSession.setRepeatingRequest(previewBuilder.build(), null, backgroundHandler); } catch (CameraAccessException e) { Log.e(TAG, "Preview error", e); } } @Override public void onConfigureFailed(CameraCaptureSession session) { Toast.makeText(MainActivity.this, "Preview failed", Toast.LENGTH_SHORT).show(); } }, backgroundHandler); } catch (CameraAccessException e) { Log.e(TAG, "Start preview error", e); } } private void startBackgroundThread() { backgroundThread = new HandlerThread("CameraBackground"); backgroundThread.start(); backgroundHandler = new Handler(backgroundThread.getLooper()); } private void stopBackgroundThread() { if (backgroundThread != null) { backgroundThread.quitSafely(); try { backgroundThread.join(); backgroundThread = null; backgroundHandler = null; } catch (InterruptedException e) { Log.e(TAG, "Stop thread error", e); } } } @Override protected void onResume() { super.onResume(); if (isRunning) { startBackgroundThread(); } } @Override protected void onPause() { if (isRunning) { stopCamera(); isRunning = false; btnControl.setText("START");
}
super.onPause();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#000000">
<!-- TextureView для камеры - 70% ширины -->
<TextureView
android:id="@+id/textureView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="7" />
<!-- Панель управления - 30% ширины -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical"
android:gravity="center"
android:background="#333333">
<Button
android:id="@+id/btnControl"
android:layout_width="150dp"
android:layout_height="60dp"
android:text="START"
android:textSize="18sp"
android:background="#4CAF50"
android:textColor="#FFFFFF" />
</LinearLayout>
</LinearLayout>
res/values/styles.xml
<resources> <!-- Базовый стиль приложения --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Цвета --> <item name="colorPrimary">#3F51B5</item> <item name="colorPrimaryDark">#303F9F</item> <item name="colorAccent">#FF4081</item> <!-- Без заголовка --> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <!-- Полноэкранный режим --> <item name="android:windowFullscreen">true</item>
</style>
</resources>
build.gradle (Module: app)
plugins { id 'com.android.application' } android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.example.simplecamera" minSdkVersion 29 // Android 10 targetSdkVersion 30 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.0' }
build.gradle (Project)
buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.0.3' } } allprojects { repositories { google() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir }
Как создать проект:
- В Android Studio: File → New → New Project
- Выберите Empty Activity
- Название: SimpleCamera
- Пакет: com.example.simplecamera
- Язык: Java
- Минимальная версия: API 29 (Android 10)
- Замените все файлы на предоставленные выше
Приложение будет работать на Android 10+ с минимальными требованиями.
Direct Link: https://chat.deepseek.com/share/ufv4wp2gfwzenv3x8f
Java Code Generation
...