diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1afadad..d336727 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,9 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + id("com.google.devtools.ksp") + id("com.google.dagger.hilt.android") + id("kotlin-parcelize") } android { @@ -9,7 +12,7 @@ android { defaultConfig { applicationId = "com.sw.dualscreen" - minSdk = 24 + minSdk = 29 targetSdk = 35 versionCode = 1 versionName = "1.0" @@ -49,6 +52,8 @@ dependencies { androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + implementation(project(":lib_face")) + // camerax implementation(libs.androidx.camera.core) implementation(libs.androidx.camera.camera2) @@ -58,4 +63,25 @@ dependencies { // 权限申请 implementation(libs.accompanist.permissions) + // hilt注入 + implementation(libs.hilt.android) + ksp(libs.hilt.android.compiler) + + // retrofit网络请求 + implementation(libs.retrofit) + implementation(libs.converter.gson) + // okhttp + implementation(libs.okhttp) + implementation(libs.logging.interceptor) + // gson + implementation(libs.gson) + // 日志打印 + implementation(libs.timber) + // 协程 + implementation(libs.kotlinx.coroutines.android) + implementation(libs.androidx.lifecycle.viewmodel.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + + implementation(libs.androidx.activity.ktx) + implementation(libs.androidx.fragment.ktx) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 764b21f..edd33a7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,20 +8,36 @@ + + + + + + + + + diff --git a/app/src/main/java/com/sw/dualscreen/App.kt b/app/src/main/java/com/sw/dualscreen/App.kt new file mode 100644 index 0000000..6cf8348 --- /dev/null +++ b/app/src/main/java/com/sw/dualscreen/App.kt @@ -0,0 +1,11 @@ +package com.sw.dualscreen + +import android.app.Application +import timber.log.Timber + +class App : Application() { + override fun onCreate() { + super.onCreate() + Timber.plant(Timber.DebugTree()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/MainActivity.kt b/app/src/main/java/com/sw/dualscreen/MainActivity.kt deleted file mode 100644 index 8885aac..0000000 --- a/app/src/main/java/com/sw/dualscreen/MainActivity.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.sw.dualscreen - -import android.os.Bundle -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat -import com.sw.dualscreen.databinding.ActivityMainBinding - -class MainActivity : AppCompatActivity() { - lateinit var binding: ActivityMainBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - binding = ActivityMainBinding.inflate(layoutInflater) - setContentView(R.layout.activity_main) - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> - val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) - insets - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/activity/Camera2Activity.kt b/app/src/main/java/com/sw/dualscreen/activity/Camera2Activity.kt new file mode 100644 index 0000000..143ee8d --- /dev/null +++ b/app/src/main/java/com/sw/dualscreen/activity/Camera2Activity.kt @@ -0,0 +1,156 @@ +package com.sw.dualscreen.activity + +import android.Manifest +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.SurfaceTexture +import android.hardware.camera2.CameraCaptureSession +import android.hardware.camera2.CameraDevice +import android.hardware.camera2.CameraManager +import android.hardware.camera2.CaptureRequest +import android.os.Bundle +import android.util.Log +import android.view.Surface +import android.view.TextureView +import android.widget.Button +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import com.sw.dualscreen.R + +class Camera2Activity : AppCompatActivity() { + private lateinit var cameraManager: CameraManager + private var cameraIdList: Array = arrayOf() + private var currentCameraIdIndex = 0 + private lateinit var textureView: TextureView + private var cameraDevice: CameraDevice? = null + private var cameraCaptureSession: CameraCaptureSession? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_camera2) + + textureView = findViewById(R.id.textureView) + cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager + + // 获取摄像头列表 + cameraIdList = cameraManager.cameraIdList + if (cameraIdList.isEmpty()) { + Toast.makeText(this, "没有可用的摄像头", Toast.LENGTH_SHORT).show() + finish() + } + + // 设置TextureView监听 + textureView.surfaceTextureListener = surfaceTextureListener + + // 切换摄像头按钮 + findViewById