diff --git a/app/src/main/java/com/example/greenwatch/AlarmRecorder.java b/app/src/main/java/com/example/greenwatch/AlarmRecorder.java
index 973f8fd..4684c55 100644
--- a/app/src/main/java/com/example/greenwatch/AlarmRecorder.java
+++ b/app/src/main/java/com/example/greenwatch/AlarmRecorder.java
@@ -1,11 +1,13 @@
package com.example.greenwatch;
+import android.graphics.SurfaceTexture;
import android.media.MediaCodec;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.media.MediaRecorder;
import android.os.Environment;
+import android.view.Surface;
import android.view.SurfaceHolder;
import java.io.File;
@@ -23,23 +25,24 @@ public class AlarmRecorder {
private Runnable videoRecorderRunnable;
private MediaRecorder videoRecorder;
private MediaRecorder audioRecorder;
- private SurfaceHolder previewHolder;
+ //private SurfaceHolder previewHolder;
+ private Surface surface;
private Thread videoThread; // Video-Thread als Instanzvariable
private Thread audioThread; // Audio-Thread als Instanzvariable
- public AlarmRecorder(SurfaceHolder previewHolder) {
+ public AlarmRecorder(SurfaceTexture surfaceTexture) {
audioRecorder = new MediaRecorder();
videoRecorder = new MediaRecorder();
videoExtractor = new MediaExtractor();
audioExtractor = new MediaExtractor();
- this.previewHolder = previewHolder;
+ this.surface = new Surface(surfaceTexture);
}
public void startRecording() {
createStoragePaths(); //Speicherort und -namen für Audio- und Video-Datei
audioRecorderRunnable = new AudioRecorder(audioRecorder, audioPath);
- videoRecorderRunnable = new VideoRecorder(videoRecorder, videoPath, previewHolder);
+ videoRecorderRunnable = new VideoRecorder(videoRecorder, videoPath, surface);
audioThread = new Thread(audioRecorderRunnable);
videoThread = new Thread(videoRecorderRunnable);
@@ -60,7 +63,7 @@ public class AlarmRecorder {
if (videoFile.exists() && audioFile.exists()) {
//Wenn Video- und Audioaufzeichnung gestoppt und abgespeichert sind, beginne mit dem Mergeprozess der beiden
mergeVideoWithAudio();
- } else { }
+ }
} catch (RuntimeException stopException) {
stopException.printStackTrace();
}
diff --git a/app/src/main/java/com/example/greenwatch/MainActivity.java b/app/src/main/java/com/example/greenwatch/MainActivity.java
index 49dc53b..413d0c8 100644
--- a/app/src/main/java/com/example/greenwatch/MainActivity.java
+++ b/app/src/main/java/com/example/greenwatch/MainActivity.java
@@ -2,8 +2,9 @@ package com.example.greenwatch;
import android.Manifest;
import android.content.pm.PackageManager;
+import android.graphics.SurfaceTexture;
import android.os.Bundle;
-import android.view.SurfaceView;
+import android.view.TextureView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
@@ -12,14 +13,13 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
-public class MainActivity extends AppCompatActivity {
+public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener{
private boolean isRecording = false;
private static final int REQUEST_PERMISSION = 200;
private Button button;
- private SurfaceView surfaceView;
+ private TextureView textureView;
private AlarmRecorder alarmRecorder;
- private static final int REQUEST_PERMISSIONS = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -27,8 +27,8 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
- surfaceView = findViewById(R.id.surfaceView);
- alarmRecorder = new AlarmRecorder(surfaceView.getHolder());
+ textureView = findViewById(R.id.textureView);
+ textureView.setSurfaceTextureListener(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
@@ -55,6 +55,34 @@ public class MainActivity extends AppCompatActivity {
});
}
+ @Override
+ public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
+ alarmRecorder = new AlarmRecorder(surfaceTexture);
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+ // Die Größe der SurfaceTexture hat sich geändert
+ // Hier können entsprechende Anpassungen vorgenommen werden
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
+ // SurfaceTexture wurde zerstört
+ // Hier können entsprechende Bereinigungen durchgeführt werden
+ return true;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+ // SurfaceTexture wurde aktualisiert
+ // Hier können entsprechende Aktionen ausgeführt werden, wenn gewünscht
+ }
+
+ private SurfaceTexture getSurfaceTexture() {
+ return textureView.getSurfaceTexture();
+ }
+
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
diff --git a/app/src/main/java/com/example/greenwatch/VideoRecorder.java b/app/src/main/java/com/example/greenwatch/VideoRecorder.java
index 070b149..869c163 100644
--- a/app/src/main/java/com/example/greenwatch/VideoRecorder.java
+++ b/app/src/main/java/com/example/greenwatch/VideoRecorder.java
@@ -1,6 +1,7 @@
package com.example.greenwatch;
import android.media.MediaRecorder;
+import android.view.Surface;
import android.view.SurfaceHolder;
import java.io.IOException;
@@ -8,12 +9,14 @@ import java.io.IOException;
public class VideoRecorder implements Runnable{
private final MediaRecorder videoRecorder;
private final String videoPath;
- private SurfaceHolder previewHolder;
+ //private SurfaceHolder previewHolder;
+ private Surface surface;
- public VideoRecorder(MediaRecorder videoRecorder, String videoPath, SurfaceHolder previewHolder) {
+
+ public VideoRecorder(MediaRecorder videoRecorder, String videoPath, Surface surface) {
this.videoRecorder = videoRecorder;
this.videoPath = videoPath;
- this.previewHolder = previewHolder;
+ this.surface = surface;
}
@Override
public void run() {
@@ -22,7 +25,7 @@ public class VideoRecorder implements Runnable{
videoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
videoRecorder.setOutputFile(videoPath);
videoRecorder.setOrientationHint(90);
- videoRecorder.setPreviewDisplay(previewHolder.getSurface());
+ videoRecorder.setPreviewDisplay(surface);
try {
videoRecorder.prepare();
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e6943f2..6767b04 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,16 +6,16 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
-