diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java index 36e3b94..7613614 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java @@ -3,6 +3,7 @@ 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; @@ -10,6 +11,8 @@ import androidx.annotation.Nullable; import androidx.camera.core.ExperimentalGetImage; import androidx.lifecycle.LifecycleService; +import com.example.ueberwachungssystem.WifiCommunication; + import java.io.File; @ExperimentalGetImage @@ -24,12 +27,38 @@ public class DetectorService extends LifecycleService { public Accelerometer motionDetector = null; public MicrophoneDetector audioDetector = null; + public WifiCommunication wifiCommunication; + + String wifiData; + StringBuffer stringBufferWifi = new StringBuffer(); + + String typOfAlarm; + @Override public int onStartCommand(Intent intent, int flags, int startId) { if (isServiceRunning) return START_NOT_STICKY; + /** Wifi Instanz **/ + wifiCommunication = new WifiCommunication(1234); + wifiCommunication.sendTrue("TEst"); + + wifiCommunication.setOnConnectionListener(new WifiCommunication.OnConnectionListener() { + @Override + public void onConnection(String data) { + Log.d("Listener", data); + wifiData = data; + stringToStringbuffer(data); + Log.d("buffer",stringBufferWifi.toString()); + passToServiceListener(stringBufferWifi); + checkState(data); + checkTyp(data); + + } + }); + + @@ -38,7 +67,8 @@ public class DetectorService extends LifecycleService { videoDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Motion Detection**/ @@ -47,7 +77,8 @@ public class DetectorService extends LifecycleService { motionDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Audio Detection **/ @@ -55,7 +86,8 @@ public class DetectorService extends LifecycleService { audioDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Audio Recorder**/ @@ -92,18 +124,44 @@ public class DetectorService extends LifecycleService { /** Pass Detection Report to Service Detection Listener and trigger it */ - public void passToServiceListener(DetectionReport detectionReport) { + public void passToServiceListener(StringBuffer stringBuffer) { if (listener != null) { - listener.onDetection(detectionReport); + listener.onDetection(stringBuffer); } } /** On Detection Listener - runs when violation is reported */ public interface OnDetectionListener { - void onDetection(@NonNull DetectionReport detectionReport); + void onDetection(@NonNull StringBuffer stringBuffer); } public void setOnDetectionListener(@NonNull DetectorService.OnDetectionListener listener) { this.listener = listener; } + + public void stringToStringbuffer(String string){ + if(string != null) { + stringBufferWifi.insert(0,string + "\n"); + } + } + + public String[] splitString(String string){ + String[] splitrxString = string.split(","); + return splitrxString; //splitrxString[0] = "1",splitrxString[1] = "HH:MM:SS", splitrxString[0].equals("1") + + } + + + public boolean checkState(String string){ + Log.d("state", String.valueOf(splitString(string)[4].equals("An"))); + return splitString(string)[4].equals("An"); + } + + public String checkTyp(String string){ + if (splitString(string)[5] != null) { + typOfAlarm = splitString(string)[5]; + Log.d("Type", typOfAlarm); + } + return typOfAlarm; + } } diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index 24cdcb3..6871fca 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -12,8 +12,11 @@ import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.ImageView; +import android.widget.Toast; import android.widget.ToggleButton; import com.example.ueberwachungssystem.Detection.Accelerometer; @@ -31,28 +34,31 @@ public class MainActivity extends AppCompatActivity { ImageView inputImageView; ImageView outputImageView; ToggleButton toggleButton; + int num=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - inputImageView = findViewById(R.id.inputImageView); outputImageView = findViewById(R.id.outputImageView); toggleButton = findViewById(R.id.toggleButton); + } + + @Override + protected void onResume() { + super.onResume(); PermissionHandler permissionHandler = new PermissionHandler(this); - permissionHandler.getPermissions(); + //permissionHandler.getPermissions(); if (permissionHandler.hasPermissions()) { - Intent serviceIntent = new Intent(this, DetectorService.class); bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); startService(serviceIntent); - toggleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -60,7 +66,6 @@ public class MainActivity extends AppCompatActivity { { if (detectorService != null){ - detectorService.videoDetector.debugProcessing(inputImageView, outputImageView); detectorService.videoDetector.startDetection(); detectorService.audioDetector.startDetection(); @@ -85,13 +90,42 @@ public class MainActivity extends AppCompatActivity { } } }); + }else{ + Toast.makeText(this,"Bitte Rechte geben", Toast.LENGTH_SHORT).show(); + } + } - - - - - + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.options_menu, menu); + return true; + } + public boolean onOptionsItemSelected(MenuItem item) { + Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show(); + PopUpClass popUpClass; + switch (item.getItemId()) { + case R.id.Rechteverwaltung: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.RechtePrüfen(); + return true; + case R.id.Sensoren: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.Sensoren(); + return true; + case R.id.Impressum: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.Impressum(); + return true; + case R.id.Detection: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.DetectionTotal(num); + return true; + default: + return super.onOptionsItemSelected(item); } } @@ -100,15 +134,18 @@ public class MainActivity extends AppCompatActivity { public void onServiceConnected(ComponentName name, IBinder service) { DetectorService.ServiceBinder binder = (DetectorService.ServiceBinder) service; detectorService = binder.getBoundService(); + detectorService.videoDetector.debugProcessing(null, outputImageView); //inputImageView detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() { @Override - public void onDetection(@NonNull DetectionReport detectionReport) { - Log.d("onDetection", detectionReport.toMessage()); + public void onDetection(@NonNull StringBuffer stringBuffer) { + Log.d("onDetection", stringBuffer.toString()); //Für oli hier Textview einbauen + num++; } }); } @Override - public void onServiceDisconnected(ComponentName name) {} + public void onServiceDisconnected(ComponentName name) { + } }; } \ No newline at end of file diff --git a/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java b/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java index 6c66539..e7a56c0 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java +++ b/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java @@ -35,7 +35,7 @@ public class PermissionRequest extends AppCompatActivity{ handler.post(new Runnable() { @Override public void run() { - Toast.makeText(mainActivity.getApplicationContext(),"Es werden Rechte benötigt", Toast.LENGTH_LONG).show(); + Toast.makeText(mainActivity.getApplicationContext(),"Es werden Rechte benötigt", Toast.LENGTH_SHORT).show(); } }); } diff --git a/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java b/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java index 9b1990a..6ed8eb4 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java +++ b/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java @@ -82,5 +82,7 @@ public class PopUpClass { public void Impressum(){ PopUpText.setText("Die Ueberwachungsapp wurde im Rahmen eines Praktikums der TH-Nürnberg programmiert"); } - + public void DetectionTotal(int num) { + PopUpText.setText("Total Detektions:" +num); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java index d22acbf..14f1329 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java +++ b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java @@ -1,5 +1,6 @@ package com.example.ueberwachungssystem; import android.annotation.SuppressLint; +import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; @@ -30,6 +31,11 @@ public class WifiCommunication { private final DatagramSocket socket; volatile private boolean running; + private boolean Gruppe =true; + private boolean showMessage = true; + + StringBuffer rxStringBuffer = new StringBuffer(); + private OnConnectionListener listener; @SuppressLint("SetTextI18n") public WifiCommunication(int port) { @@ -51,20 +57,20 @@ public class WifiCommunication { } public interface OnConnectionListener { - void onConnection(StringBuffer data); + void onConnection(String data); } public void setOnConnectionListener(@NonNull OnConnectionListener listener) { this.listener = listener; } - public void sendWifiData(StringBuffer wifiMessage) { + public void sendWifiData(String wifiMessage) { if (listener != null) { listener.onConnection(wifiMessage); + } } private class ReceiveThread extends Thread { - private StringBuffer rxStringBuffer = new StringBuffer(); private String rxString=""; private String previousRxString = ""; @@ -77,11 +83,30 @@ public class WifiCommunication { socket.receive(rxPacket); rxString = new String(receiveData, 0, rxPacket.getLength()); String[] splitrxString = rxString.split(","); - if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7) { - rxStringBuffer.append(rxString).append("\n"); - sendWifiData(rxStringBuffer); - //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); - previousRxString = rxString; + String[] splitrxStringBuffer = splitBufferIntoStrings(rxStringBuffer); + for(String elem: splitrxStringBuffer){ + if(elem.equals(rxString)){ + showMessage = false; + }else{ + showMessage = true; + } + } + if(Gruppe){ + if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) { + rxStringBuffer.append(rxString).append("\n"); + Log.d("empfangen", rxString); + sendWifiData(rxString); + //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); + previousRxString = rxString; + } + }else{ + if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) { + rxStringBuffer.append(rxString).append("\n"); + Log.d("empfangen", rxString); + sendWifiData(rxString); + //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); + previousRxString = rxString; + } } } while (running); } @@ -99,16 +124,17 @@ public class WifiCommunication { if(send) { send = false; - SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); + /*SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date curDate = new Date(System.currentTimeMillis()); - String str = formatter.format(curDate); + String str = formatter.format(curDate);*/ byte[] send_Data = new byte[512]; - String txString = ("1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video," +messageToSend); + String txString = (messageToSend); //"1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video," + Log.d("send", txString); send_Data = txString.getBytes(); DatagramPacket txPacket = new DatagramPacket(send_Data, txString.length(), address, port); - for(int i = 0; i < 300; i++) { + for(int i = 0; i < 500; i++) { socket.send(txPacket); } } @@ -143,4 +169,8 @@ public class WifiCommunication { running = false; socket.close(); } + public String[] splitBufferIntoStrings(StringBuffer string){ + String[] splitrxString2 = string.toString().split("\n"); + return splitrxString2; + } } diff --git a/app/src/main/res/menu/options_menu.xml b/app/src/main/res/menu/options_menu.xml index f2c05bf..ddb0237 100644 --- a/app/src/main/res/menu/options_menu.xml +++ b/app/src/main/res/menu/options_menu.xml @@ -4,6 +4,8 @@ android:title="Rechteverwaltung" /> + \ No newline at end of file