|
|
@@ -0,0 +1,164 @@ |
|
|
|
package com.example.ueberwachungssystem.Detection; |
|
|
|
|
|
|
|
import android.Manifest; |
|
|
|
import android.app.Activity; |
|
|
|
import android.content.Intent; |
|
|
|
import android.content.pm.PackageManager; |
|
|
|
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.core.app.ActivityCompat; |
|
|
|
import androidx.core.content.ContextCompat; |
|
|
|
import androidx.lifecycle.LifecycleService; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
@ExperimentalGetImage |
|
|
|
public class DetectorService extends LifecycleService { |
|
|
|
|
|
|
|
public TestBinder testBinder = new TestBinder(); |
|
|
|
private DetectorService.OnDetectionListener listener; |
|
|
|
private boolean isServiceRunning = false; |
|
|
|
|
|
|
|
VideoDetector videoDetector = null; |
|
|
|
AudioRecorder audioRecorder = null; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public int onStartCommand(Intent intent, int flags, int startId) { |
|
|
|
if (isServiceRunning) |
|
|
|
return START_NOT_STICKY; |
|
|
|
videoDetector = new VideoDetector(this); |
|
|
|
videoDetector.setOnDetectionListener(new Detector.OnDetectionListener() { |
|
|
|
@Override |
|
|
|
public void onDetection(@NonNull DetectionReport detectionReport) { |
|
|
|
passToServiceListener(detectionReport); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
audioRecorder = new AudioRecorder(this); |
|
|
|
|
|
|
|
|
|
|
|
isServiceRunning = true; |
|
|
|
|
|
|
|
return super.onStartCommand(intent, flags, startId); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onDestroy() { |
|
|
|
super.onDestroy(); |
|
|
|
isServiceRunning = false; |
|
|
|
} |
|
|
|
|
|
|
|
/** 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; |
|
|
|
} |
|
|
|
public void setVideoRecordingDir(File outputDir) { |
|
|
|
if (videoDetector != null) |
|
|
|
videoDetector.setOutputDir(outputDir); |
|
|
|
} |
|
|
|
|
|
|
|
/** 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; |
|
|
|
} |
|
|
|
public void setAudioRecordingDir(File outputDir) { |
|
|
|
if (audioRecorder != null) |
|
|
|
audioRecorder.setOutputDir(outputDir); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 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; |
|
|
|
} |
|
|
|
} |