Browse Source

Probleme mit Database Beschreiben und Lesen.

Bitte einheitliches DB Format festelegen und alle Commits mal Pusheb
SubWorker^2
Patrick Halboth 3 years ago
parent
commit
9932f3fc24

+ 1
- 0
app/src/main/AndroidManifest.xml View File

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<application <application
android:allowBackup="true" android:allowBackup="true"

+ 15
- 7
app/src/main/java/de/edotzlaff/schockwelle/EarthquakeMapsActivity.java View File

import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.location.Location; import android.location.Location;
import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer; import android.os.CountDownTimer;
import android.os.SystemClock; import android.os.SystemClock;
import android.text.format.Formatter;
import android.util.Log; import android.util.Log;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;


//Shake Sensor //Shake Sensor
private SensorManager mSensorManager; private SensorManager mSensorManager;
private static final float mUpperThreshold = 10.5f; // für Emulator auf 1.5 setzen
private static final float mLowerThreshold = 5.5f; // für Emulator auf 0.5 setzen
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 static final long mShakeDetectionLockTimeMicroSeconds = 10000;
private float mAccel; private float mAccel;
private float mAccelCurrent; private float mAccelCurrent;


private void writeEarthquakeToDatabase() private void writeEarthquakeToDatabase()
{ {
setDataBaseValues(true);
//TODO Erdbeben + Erzeugerparameter in Datenbank schreiben //TODO Erdbeben + Erzeugerparameter in Datenbank schreiben
} }
@Override @Override
Toast.makeText(EarthquakeMapsActivity.this, currentTime.toString(), Toast.LENGTH_SHORT).show(); Toast.makeText(EarthquakeMapsActivity.this, currentTime.toString(), Toast.LENGTH_SHORT).show();
currentLocation.setLatitude(breitengrad); currentLocation.setLatitude(breitengrad);
currentLocation.setLongitude(laengengrad); currentLocation.setLongitude(laengengrad);
setDataBaseValues(); //TODO Edward: Die Funktion geht jetzt. Statt Datum wird Unix Zeitstempel als Long Typ verwendet
setDataBaseValues(false); //TODO Edward: Die Funktion geht jetzt. Statt Datum wird Unix Zeitstempel als Long Typ verwendet
moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),15f); moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),15f);
} }
else{ else{
@Override @Override
public void onDataChange(@NonNull DataSnapshot snapshot) { public void onDataChange(@NonNull DataSnapshot snapshot) {
processDataBaseValues(snapshot); //Daten Snapshot, Übergabe an processDataBaseValues processDataBaseValues(snapshot); //Daten Snapshot, Übergabe an processDataBaseValues

} }
@Override @Override
public void onCancelled(@NonNull DatabaseError error) { public void onCancelled(@NonNull DatabaseError error) {




//TODO Edward: Hier ist eine beispielhafte Methode mit der du Werte in der Datenbank setzen kannst //TODO Edward: Hier ist eine beispielhafte Methode mit der du Werte in der Datenbank setzen kannst
public void setDataBaseValues()
public void setDataBaseValues(boolean vibration)
{ {
currentTime = Calendar.getInstance().getTimeInMillis();
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
int ip = wm.getConnectionInfo().getIpAddress();
String ipAddress = String.format("%d.%d.%d.%d",(ip & 0xff),(ip >> 8 & 0xff),(ip >> 16 & 0xff), (ip >> 24 & 0xff));
mDatenbank = FirebaseDatabase.getInstance().getReference(); mDatenbank = FirebaseDatabase.getInstance().getReference();
mDatenbank.child("overview").child("IDG1").child("ip").setValue("10.00.00.001");
mDatenbank.child("overview").child("IDG1").child("vibration").setValue(true);
mDatenbank.child("overview").child("IDG1").child("ip").setValue(ipAddress);
mDatenbank.child("overview").child("IDG1").child("vibration").setValue(vibration);
mDatenbank.child("overview").child("IDG1").child("timestamp").setValue(currentTime); //aktueller Zeitstempel wird in Datenbank eingetragen mDatenbank.child("overview").child("IDG1").child("timestamp").setValue(currentTime); //aktueller Zeitstempel wird in Datenbank eingetragen
mDatenbank.child("overview").child("IDG1").child("breitengrad").setValue(currentLocation.getLatitude()); //aktueller Breitengrad mDatenbank.child("overview").child("IDG1").child("breitengrad").setValue(currentLocation.getLatitude()); //aktueller Breitengrad
mDatenbank.child("overview").child("IDG1").child("laengengrad").setValue(currentLocation.getLongitude()); //aktueller Längergrad mDatenbank.child("overview").child("IDG1").child("laengengrad").setValue(currentLocation.getLongitude()); //aktueller Längergrad
mDatenbank.child("overview").child("IDG1").child("amplitude").setValue(1001);
mDatenbank.child("overview").child("IDG1").child("amplitude").setValue(255);
} }
} }

+ 16
- 4
app/src/main/java/de/edotzlaff/schockwelle/SensorMapsActivity.java View File

private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234; private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
private static final double EARTHQUAKE_VELOCITY = 1; // 1 Meter pro Sekunde Erdbebengeschwindigkeit
//vars //vars
private Boolean mLocationPermissionsGranted = false; private Boolean mLocationPermissionsGranted = false;
private GoogleMap mMap; private GoogleMap mMap;
getVibrationAbility(); getVibrationAbility();
//distance(currentLocation.getLatitude(), currentLocation.getLongitude(),breitengrad,laengengrad); //Übergabe zur Berechnung der Distanz zwischen Auslöser und aktuellem Standort //distance(currentLocation.getLatitude(), currentLocation.getLongitude(),breitengrad,laengengrad); //Übergabe zur Berechnung der Distanz zwischen Auslöser und aktuellem Standort
//TODO Patrick: die Funktion distance gibt Meter zurück, könntest Du das mit dem Zeitstempel und der Berechnung bis zur Vibration machen? //TODO Patrick: die Funktion distance gibt Meter zurück, könntest Du das mit dem Zeitstempel und der Berechnung bis zur Vibration machen?
setVibrationTimer(10000,1000,255);
// setVibrationTimer(10000,1000,255);
} }


private void getLocationPermission() { private void getLocationPermission() {
} }
} }


private long getTimeStampDifference(Date vibrationTime)
private long getTimeStampDifference(float distance)
{ {
long diff= 0; long diff= 0;
//TODO Zeitdifferenz in Millisekunden zwischen aktuellen Uhrzeit und Vibratonszeitstempel berechnen //TODO Zeitdifferenz in Millisekunden zwischen aktuellen Uhrzeit und Vibratonszeitstempel berechnen


if (distance>0)
{
diff = (long)Math.round(1/(EARTHQUAKE_VELOCITY/distance));
}
return diff; return diff;
} }
private void setVibrationTimer(long msDelay, int duration, int amplitude) private void setVibrationTimer(long msDelay, int duration, int amplitude)
//####### Auslesen für ing-Werte #######: //####### Auslesen für ing-Werte #######:
String amplitudeString = data.child("overview").child("IDG" + i).child("amplitude").getValue().toString(); String amplitudeString = data.child("overview").child("IDG" + i).child("amplitude").getValue().toString();
int amplitude = Integer.parseInt(amplitudeString); int amplitude = Integer.parseInt(amplitudeString);

//TODO Workaround beseiteigen: hier wird immer davon ausgegangen, dass auslösendes Gerät die ID 1 besitzt
if(vibration == true && i == 1)
{
float distance = distance(currentLocation.getLatitude(), currentLocation.getLongitude(),breitengrad,laengengrad);
long delay = getTimeStampDifference(distance);
setVibrationTimer(delay,1000,amplitude);
}
//####### Optional zur Kontrolle #######: //####### Optional zur Kontrolle #######:
/* /*
System.out.println("IDG" + i + " - IP:" + data.child("overview").child("IDG" + i).child("ip").getValue().toString()); System.out.println("IDG" + i + " - IP:" + data.child("overview").child("IDG" + i).child("ip").getValue().toString());

Loading…
Cancel
Save