added Detector, DetectorReport, Logger

This commit is contained in:
Leon Market 2023-05-24 20:39:31 +02:00
parent 065acefeb9
commit 4999f1b998
6 changed files with 209 additions and 2 deletions

View File

@ -0,0 +1,83 @@
package com.example.ueberwachungssystem;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
public class Beschleunigungssensor extends AppCompatActivity implements SensorEventListener
{
private Logger logger;
private SensorManager sensorManager;
private int sensorType = Sensor.TYPE_ACCELEROMETER;
private Sensor sensor;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setTitle(this.getClass().getSimpleName());
TextView textView = new TextView(this);
setContentView(textView);
logger = new Logger(this.getClass().getSimpleName(),textView,"");
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
if(sensorManager.getSensorList(sensorType).size()==0)
{
logger.log("Es gibt den gewünschten Sensor nicht");
sensor = null;
}
else
{
sensor = sensorManager.getSensorList(sensorType).get(0);
}
}
@Override
protected void onResume()
{
super.onResume();
if(sensor != null)
{
if(sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME))
{
logger.log("Wir haben uns beim Sensor angemeldet.");
}
else
{
logger.log("Das Anmelden beim Sensor hat nicht so gut geklappt");
}
}
}
@Override
protected void onPause()
{
super.onPause();
if(sensor != null) {
sensorManager.unregisterListener(this, sensor);
logger.log("Wir haben uns beim Sensor abgemeldet");
}
}
@Override
public void onSensorChanged(SensorEvent event)
{
String sb = "t=" + event.timestamp +
"\nx=" + event.values[0] + // Wert legend: x = 0.04
"\ny=" + event.values[1] + // Wert liegend: y = 0.44
"\nz=" + event.values[2]; // Wert liegend: z = 9.90 = Erdbeschleunigung --> Wenn Ausrichtung unbekannt ist, müsste kalibrierung bei Start der Bewegungsüberwachung vorgenommen werden
logger.clearLog();
logger.log(sb);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{
}
}

View File

@ -0,0 +1,36 @@
package com.example.ueberwachungssystem;
import android.util.Log;
import java.util.Calendar;
/** Detection Report Class */
public class DetectionReport {
public String timeStamp;
public String detectionType;
public float detectedValue;
public String detectorID;
public DetectionReport(String detectorID, String detectionType, float detectedAmplitude) {
this.timeStamp = String.valueOf(Calendar.getInstance().getTime());
this.detectionType = detectionType;
this.detectedValue = detectedAmplitude;
this.detectorID = detectorID;
}
/** Get Detection Report in String format */
public String toString() {
String time = "Time: " + "[" + this.timeStamp + "]";
String type = "Type: " + "[" + this.detectionType + "]";
String value = "Value: " + "[" + this.detectedValue + "]";
String id = "ID: " + "[" + this.detectorID + "]";
return String.join("\t", time, type, value, id);
}
/** Debug Report */
public void log(String tag) {
Log.d(tag, this.toString());
}
}

View File

@ -0,0 +1,39 @@
package com.example.ueberwachungssystem;
import android.content.Context;
import androidx.annotation.NonNull;
abstract public class Detector {
private OnDetectionListener listener;
/** Constructor - takes context of current activity */
public Detector(Context context) {};
/** On Detection Listener - runs when violation is reported */
public interface OnDetectionListener {
void onDetection(@NonNull DetectionReport detectionReport);
}
public void setOnDetectionListener(@NonNull OnDetectionListener listener) {
this.listener = listener;
}
/** Triggers onDetectionListener - call this to trigger violation/alarm */
private void reportViolation(String detectorID, String detectionType, float amplitude) {
if (listener != null) {
DetectionReport detectionReport = new DetectionReport(detectorID, detectionType, amplitude);
listener.onDetection(detectionReport);
} else {
throw new IllegalStateException("No listener set for violation reporting");
}
}
/** Starts Detection (abstract method: needs to be overridden in child class) */
public abstract void startDetection();
/** Stops Detection (abstract method: needs to be overridden in child class) */
public abstract void stopDetection();
}

View File

@ -0,0 +1,44 @@
package com.example.ueberwachungssystem;
import android.widget.TextView;
import android.util.Log;
import java.io.PrintWriter;
import java.io.StringWriter;
public class Logger {
private TextView textView;
private StringBuffer sb = new StringBuffer();
private String tag;
public Logger(String tag, TextView textView, String logInitText) {
this.tag = tag;
this.textView = textView;
sb.append(logInitText);
}
public void log(String s) {
Log.d(tag, s);
sb.append(s).append("\n");
if (textView != null) {
textView.setText(sb.toString());
}
}
public void log(Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
log(sw.toString());
}
public void clearLog() {
sb.setLength(0);
if (textView != null) {
textView.setText("");
}
}
public String getLoggedText() {
return sb.toString();
}
}

View File

@ -6,9 +6,14 @@ import android.os.Bundle;
public class MainActivity extends AppCompatActivity{
private Logger logger;
private Beschleunigungssensor beschleunigungssensor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(this.getClass().getSimpleName());
setContentView(R.layout.activity_main);
}
}

View File

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
tools:context=".MainActivityBackup">
<TextView
android:layout_width="wrap_content"