@@ -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; | |||
} | |||
} |
@@ -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) { | |||
} | |||
}; | |||
} |
@@ -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(); | |||
} | |||
}); | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -4,6 +4,8 @@ | |||
android:title="Rechteverwaltung" /> | |||
<item android:id="@+id/Sensoren" | |||
android:title="Sensoren" /> | |||
<item android:id="@+id/Detection" | |||
android:title="Detektionen" /> | |||
<item android:id="@+id/Impressum" | |||
android:title="Impressum" /> | |||
</menu> |