diff --git a/app/build.gradle b/app/build.gradle
index 02a2cc2..083ba82 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,6 +42,8 @@ dependencies {
def opencv_version = "4.5.3.0"
implementation "com.quickbirdstudios:opencv:${opencv_version}"
+ implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
+
// Required for CameraX
def camerax_version = "1.2.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ea0c3b..3fe9720 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,6 +24,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java
new file mode 100644
index 0000000..8834374
--- /dev/null
+++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java
@@ -0,0 +1,134 @@
+package com.example.ueberwachungssystem.Detection;
+
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import android.util.Log;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.camera.core.ExperimentalGetImage;
+import androidx.lifecycle.LifecycleService;
+
+@ExperimentalGetImage
+public class DetectorService extends LifecycleService {
+
+ public TestBinder testBinder = new TestBinder();
+ private DetectorService.OnDetectionListener listener;
+
+ VideoDetector videoDetector = null;
+ AudioRecorder audioRecorder = null;
+
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ videoDetector = new VideoDetector(this);
+ videoDetector.setOnDetectionListener(new Detector.OnDetectionListener() {
+ @Override
+ public void onDetection(@NonNull DetectionReport detectionReport) {
+ passToServiceListener(detectionReport);
+ }
+ });
+
+ audioRecorder = new AudioRecorder(this);
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ /** Service methods */
+ public class TestBinder extends Binder {
+ public DetectorService getBoundService() {
+ // Return an instance of the TestService
+ return DetectorService.this;
+ }
+ }
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ super.onBind(intent);
+ return testBinder;
+ }
+
+
+ /** Video Detection */
+ public void startVideoDetection() {
+ if(videoDetector != null)
+ videoDetector.startDetection();
+ }
+ public void stopVideoDetection() {
+ if(videoDetector != null)
+ videoDetector.stopDetection();
+ }
+ public boolean isVideoDetectionRunning() {
+ if(videoDetector != null)
+ return videoDetector.isDetecting();
+ return false;
+ }
+ public void debugVideoProcessing(ImageView input, ImageView output) {
+ if(videoDetector != null)
+ videoDetector.debugProcessing(input, output);
+ }
+
+ /** Audio Detection */
+ public void startAudioDetection() {
+
+ }
+ public void stopAudioDetection() {
+
+ }
+
+ /** Motion Detection */
+ public void startMotionDetection() {
+
+ }
+ public void stopMotionDetection() {
+
+ }
+
+ /** Video Recording */
+ public void startVideoRecording() {
+ if(videoDetector != null)
+ videoDetector.startRecording();
+ }
+ public void stopVideoRecording() {
+ if(videoDetector != null)
+ videoDetector.stopRecording();
+ }
+ public boolean isVideoRecordingRunning() {
+ if(videoDetector != null)
+ return videoDetector.isRecording();
+ return false;
+ }
+
+ /** Audio Recording */
+ public void startAudioRecording() {
+ if(audioRecorder != null)
+ audioRecorder.startRecording();
+ }
+ public void stopAudioRecording() {
+ if(audioRecorder != null)
+ audioRecorder.stopRecording();
+ }
+ public boolean isAudioRecordingRunning() {
+ if(videoDetector != null)
+ return audioRecorder.isRecording();
+ return false;
+ }
+
+
+ /** pass Detection Report to Service Detection Listener and trigger it */
+ public void passToServiceListener(DetectionReport detectionReport) {
+ if (listener != null) {
+ listener.onDetection(detectionReport);
+ }
+ }
+
+
+ /** On Detection Listener - runs when violation is reported */
+ public interface OnDetectionListener {
+ void onDetection(@NonNull DetectionReport detectionReport);
+ }
+ public void setOnDetectionListener(@NonNull DetectorService.OnDetectionListener listener) {
+ this.listener = listener;
+ }
+}
diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
index a75571b..cdecc38 100644
--- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
+++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
@@ -5,48 +5,43 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.ExperimentalGetImage;
import androidx.camera.view.PreviewView;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
import android.os.Bundle;
+import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ToggleButton;
-import com.example.ueberwachungssystem.Detection.AudioRecorder;
import com.example.ueberwachungssystem.Detection.DetectionReport;
-import com.example.ueberwachungssystem.Detection.Detector;
-import com.example.ueberwachungssystem.Detection.VideoDetector;
+import com.example.ueberwachungssystem.Detection.DetectorService;
@ExperimentalGetImage
public class MainActivity extends AppCompatActivity {
+ private DetectorService detectorService = new DetectorService();
+ private ImageView inputImageView;
+ private ImageView outputImageView;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- ImageView inputImageView = findViewById(R.id.inputImageView);
- ImageView outputImageView = findViewById(R.id.outputImageView);
+ inputImageView = findViewById(R.id.inputImageView);
+ outputImageView = findViewById(R.id.outputImageView);
PreviewView previewView = findViewById(R.id.previewView);
- VideoDetector vd = new VideoDetector(this);
- //vd.setPreviewView(previewView);
- vd.debugProcessing(inputImageView, outputImageView);
- vd.setOnDetectionListener(new Detector.OnDetectionListener() {
- @Override
- public void onDetection(@NonNull DetectionReport detectionReport) {
- Log.d("onDetection", detectionReport.toString());
- if (detectionReport.detectionState)
- vd.startRecording();
- else
- vd.stopRecording();
- }
- });
- vd.startDetection();
+ Intent serviceIntent = new Intent(this, DetectorService.class);
+ bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
+ startService(serviceIntent);
- AudioRecorder audioRecorder = new AudioRecorder(this);
@@ -56,17 +51,33 @@ public class MainActivity extends AppCompatActivity {
public void onClick(View v) {
if (toggleButton.isChecked())
{
- //vd.startDetection();
- vd.stopDetection();
- //vd.startRecording();
- audioRecorder.startRecording();
+ detectorService.startVideoRecording();
+ //detectorService.startAudioRecording();
}
else {
- //vd.stopDetection();
- vd.stopRecording();
- audioRecorder.stopRecording();
+ //detectorService.stopAudioRecording();
+ detectorService.stopVideoRecording();
}
}
});
}
+
+ private ServiceConnection serviceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ DetectorService.TestBinder binder = (DetectorService.TestBinder) service;
+ detectorService = binder.getBoundService();
+
+ detectorService.startVideoDetection();
+ detectorService.debugVideoProcessing(inputImageView, outputImageView);
+ detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() {
+ @Override
+ public void onDetection(@NonNull DetectionReport detectionReport) {
+ Log.d("onDetection", detectionReport.toString());
+ }
+ });
+ }
+ @Override
+ public void onServiceDisconnected(ComponentName name) {}
+ };
}
\ No newline at end of file