package de.edotzlaff.detection; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; import android.os.CountDownTimer; import android.util.Log; import androidx.annotation.RequiresApi; import androidx.fragment.app.FragmentActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import de.edotzlaff.detection.detektion.Detektionssignal; import de.edotzlaff.detection.detektion.Epizentrum; import de.edotzlaff.detection.detektion.Erdbeben; import java.util.ArrayList; import java.util.Objects; public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private static final String TAGEPIZENTRUM = "Epizentrum"; //########################################################################################################################################################################## //################################################################## vvv SensorParameter vvv ############################################################################## private SensorManager mSensorManager; private static final float mUpperThreshold = 1.5f; // für Emulator auf 1.5 setzen private static final float mLowerThreshold = 0.5f; // für Emulator auf 0.5 setzen private static final long mShakeDetectionLockTimeMicroSeconds = 10000; private float mAccel; private float mAccelCurrent; private float mAccelLast; private boolean mShakeDetectionIsActive = false; private boolean mShakeDetected = false; private boolean allowShakeEvent = true; //################################################################## ^^^^ SensorParameter ^^^^ ############################################################################ //########################################################################################################################################################################## @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earthquake_location); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } //########################################################################################################################################################################## //################################################################## vvv DB Code vvv ##################################################################################### //TODO Aron //################################################################## ^^^^ DB Code ^^^^ ################################################################################### //########################################################################################################################################################################## //################################################################## vvv Detection Code vvv ################################################################################### //########################################################################################################################################################################## private final SensorEventListener mSensorListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; mAccelLast = mAccelCurrent; mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z)); float delta = mAccelCurrent - mAccelLast; mAccel = mAccel * 0.9f + delta; // Log.d(TAG,"mAccel: "+ mAccel); if (mShakeDetectionIsActive) { if(Math.abs(mAccel) > mUpperThreshold) { new CountDownTimer(1500, 10) { public void onTick(long millisUntilFinished) { if (Math.abs(mAccel) > mUpperThreshold) { mShakeDetectionIsActive = false; } else if (Math.abs(mAccel) < mLowerThreshold) { mShakeDetectionIsActive = true; this.cancel(); } } public void onFinish() { if (Math.abs(mAccel) > mUpperThreshold) { mShakeDetectionIsActive = false; mShakeDetected = true; earthquakeDetected(); } else { mShakeDetectionIsActive = true; mShakeDetected = false; } } }.start(); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; private void earthquakeDetected() { Toast.makeText(getApplicationContext(), "!Earthquake detected!", Toast.LENGTH_SHORT).show(); //setDataBaseValues(); } //################################################################## ^^^^ Detection Code ^^^^ ################################################################################### //########################################################################################################################################################################## //########################################################################################################################################################################## //################################################################## vvv Calculate Epicenter vvv ######################################################################### //TODO Jan @RequiresApi(api = Build.VERSION_CODES.O) /* public Epizentrum ermittleEpizentrum(DataSnapshot data) { Erdbeben erdbeben = new Erdbeben(); erdbeben.addDetektionssignalList(mapToDetektionssignale(data)); Epizentrum epizentrum = new Epizentrum(); epizentrum = erdbeben.ermittleEpizentrum(); if(Objects.isNull(epizentrum)) { Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden"); } else { Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY()); } return epizentrum; } */ /* public ArrayList mapToDetektionssignale(DataSnapshot data) { ArrayList detektionssignale = new ArrayList<>(); for(data.child("overviewnodes").getChildernKey) { Detektionssignal detektionssignal = new Detektionssignal(); detektionssignal.setAnkunftsZeit(); detektionssignal.setDeviceId(); detektionssignal.setKoordinaten(data.child("overviewnodes").child("IDG" + f).child("d_breitengrad").getValue().toString(), data.child("overviewnodes").child("IDG" + f).child("e_laengengrad").getValue().toString()); detektionssignal.setGeschwErdbeben(); detektionssignale.add(detektionssignal); } return detektionssignale; } */ //################################################################## ^^^^ Calculate Epicenter ^^^^ ####################################################################### //########################################################################################################################################################################## //########################################################################################################################################################################## //################################################################## vvv Maps Code vvv ################################################################################### @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //TODO Aron: Daten aus DB in die jeweiligen Devices einsetzten //aus DB für Device 1 long lat LatLng divice1 = new LatLng(-34, 152); mMap.addMarker(new MarkerOptions().position(divice1).title("Device 1").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 2 long lat LatLng divice2 = new LatLng(-33, 152); mMap.addMarker(new MarkerOptions().position(divice2).title("Device 2").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 3 long lat LatLng divice3 = new LatLng(-34, 150); mMap.addMarker(new MarkerOptions().position(divice3).title("Device 3").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //man könnten noch eine IF Abfrage einbauen falls es 4 Devices gibt // Add a marker in Epicenter LatLng epicenter = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(epicenter).title("Epicenter")); mMap.moveCamera(CameraUpdateFactory.newLatLng(epicenter)); } //################################################################## ^^^^ Maps Code ^^^^ ################################################################################# //########################################################################################################################################################################## }