|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- package de.edotzlaff.schockwelle;
-
- import android.Manifest;
- import android.content.pm.PackageManager;
- import android.location.Location;
- import android.os.Bundle;
- import android.util.Log;
- import android.widget.TextView;
- import android.widget.Toast;
-
- import androidx.annotation.NonNull;
- import androidx.core.app.ActivityCompat;
- import androidx.core.content.ContextCompat;
- import androidx.fragment.app.FragmentActivity;
-
- import com.google.android.gms.location.FusedLocationProviderClient;
- import com.google.android.gms.location.LocationServices;
- 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.LatLng;
- import com.google.android.gms.maps.model.MarkerOptions;
- import com.google.android.gms.tasks.OnCompleteListener;
- import com.google.android.gms.tasks.Task;
- import com.google.firebase.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.ValueEventListener;
-
- import java.util.Calendar;
- import java.util.Date;
-
- public class SensorMapsActivity extends FragmentActivity implements OnMapReadyCallback {
-
-
- private static final String TAG = "MainActivity";
- private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
- private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
-
- //vars
- private Boolean mLocationPermissionsGranted = false;
- private GoogleMap mMap;
- private FusedLocationProviderClient mFusedLocationProviderClient;
-
- Date currentTime;
- Location currentLocation;
-
- private double breitengrad;
- private double laengengrad;
-
- private DatabaseReference mDatenbank;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_sensor_maps);
-
- TextView tv= (TextView) findViewById(R.id.txtSensor);
-
- getLocationPermission(); //Zuerst werden die aktuellen Standortdaten ermittelt
-
- getDataBaseValues(); // Hier werden die Daten von der DB abgefragt //TODO Edward: Geht wieder :D
-
- //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?
- }
-
- private void getLocationPermission() {
- String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
- if (ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
- mLocationPermissionsGranted = true;
- initMap();
- } else {
- ActivityCompat.requestPermissions(this, permissions, LOCATION_PERMISSION_REQUEST_CODE);
- }
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- mLocationPermissionsGranted = false;
-
- switch (requestCode) {
- case LOCATION_PERMISSION_REQUEST_CODE: {
- if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- mLocationPermissionsGranted = true;
- //initalize or map
- initMap();
- }
- }
- }
- }
-
- void initMap(){
- // 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);
- }
-
- @Override
- public void onMapReady(GoogleMap googleMap) {
-
- Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show();
- mMap = googleMap;
-
- if (mLocationPermissionsGranted) {
- getDeviceLocation();
-
- if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
- != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
- Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
-
- return;
- }
- mMap.setMyLocationEnabled(true);
- }
-
- // Add a marker in Sydney and move the camera
- LatLng sydney = new LatLng(-34, 151);
- mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
- mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
- }
-
- private void getDeviceLocation(){
- mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
- try {
- if (mLocationPermissionsGranted){
- final Task location = mFusedLocationProviderClient.getLastLocation();
-
- location.addOnCompleteListener(new OnCompleteListener() {
-
- @Override
- public void onComplete(@NonNull Task task) {
- if (task.isSuccessful()){
- currentLocation = (Location) task.getResult();
- currentTime = Calendar.getInstance().getTime();
- Toast.makeText(SensorMapsActivity.this, currentTime.toString(), Toast.LENGTH_SHORT).show();
- moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),15f);
- }
- else{
- Toast.makeText(SensorMapsActivity.this, "Current Location unavailable", Toast.LENGTH_SHORT).show();
- }
- }
- });
- }
- }catch (SecurityException e){
- Log.e(TAG,"Device Location not found" + e.getMessage());
- }
- }
-
- private void moveCamera(LatLng latlng, float zoom){
- Log.d(TAG,"Latitude: "+latlng.latitude+"Longitude: "+latlng.longitude);
- mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, zoom));
- }
-
- //TODO Edward: Mit Methode getDataBaseValues werden die Werte in der DB abgefragt. In Methode processDataBaseValues werden diese beispielhaft ausgelesen. Kann nach Bedarf angepasst werden.
- public void getDataBaseValues()
- {
- mDatenbank = FirebaseDatabase.getInstance().getReference();
- mDatenbank.addValueEventListener(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot snapshot) {
- processDataBaseValues(snapshot);
- }
- @Override
- public void onCancelled(@NonNull DatabaseError error) {
- getDataBaseFailure(error);
- }
- });
- }
-
- public void processDataBaseValues (DataSnapshot data)
- {
- for (int i = 1; i<=4; i++) //Für alle IDG 1-4 werden Werte ausgegeben
- {
- //####### Auslesen für String-Werte #######:
- String ipAdresse = data.child("overview").child("IDG" + i).child("ip").getValue().toString();
-
- //####### Auslesen für boolean-Werte #######:
- String vibrationString = data.child("overview").child("IDG" + i).child("vibration").getValue().toString();
- boolean vibration;
- if(vibrationString == "true"){
- vibration = true;
- }else{
- vibration = false;
- }
-
- //####### Auslesen für double-Werte #######:
- String breitengradString = data.child("overview").child("IDG" + i).child("breitengrad").getValue().toString();
- String laengengradString = data.child("overview").child("IDG" + i).child("laengengrad").getValue().toString();
- double breitengrad = Double.parseDouble(breitengradString);
- double laengengrad = Double.parseDouble(laengengradString);
-
- //####### Auslesen für long-Werte #######:
- String timestampString = data.child("overview").child("IDG" + i).child("timestamp").getValue().toString();
- long timestamp = Long.parseLong(timestampString);
-
- //####### Auslesen für ing-Werte #######:
- String amplitudeString = data.child("overview").child("IDG" + i).child("amplitude").getValue().toString();
- int amplitude = Integer.parseInt(amplitudeString);
-
- //####### Optional zur Kontrolle #######:
- /*
- System.out.println("IDG" + i + " - IP:" + data.child("overview").child("IDG" + i).child("ip").getValue().toString());
- System.out.println("IDG" + i + " - Vibration:" + data.child("overview").child("IDG" + i).child("vibration").getValue().toString());
- System.out.println("IDG" + i + " - Zeitstempel:" + data.child("overview").child("IDG" + i).child("timestamp").getValue().toString());
- System.out.println("IDG" + i + " - Breitengrad:" + data.child("overview").child("IDG" + i).child("breitengrad").getValue().toString());
- System.out.println("IDG" + i + " - Laengengrad:" + data.child("overview").child("IDG" + i).child("laengengrad").getValue().toString());
- System.out.println("IDG" + i + " - Amplitude:" + data.child("overview").child("IDG" + i).child("amplitude").getValue().toString());
- */
- }
- }
-
- public void getDataBaseFailure (DatabaseError error)
- {
- System.out.println("Fehler");
- Log.w("Datenbankfehler", error.toException());
- }
-
- //TODO Edward Dauer für Timer berechnen bis Smartphone vibriert
-
- private float distance(double currentlatitude, double currentlongitude, double originLat, double originLon) {
-
- float[] results = new float[1];
- Location.distanceBetween(currentlatitude, currentlongitude, originLat, originLon, results);
- float distanceInMeters = results[0];
-
- return distanceInMeters;
- }
- }
|