Projektarbeit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EarthquakeMapsActivity.java 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package de.edotzlaff.schockwelle;
  2. import android.Manifest;
  3. import android.content.pm.PackageManager;
  4. import android.location.Location;
  5. import android.os.Bundle;
  6. import android.os.SystemClock;
  7. import android.util.Log;
  8. import android.widget.Toast;
  9. import androidx.annotation.NonNull;
  10. import androidx.core.app.ActivityCompat;
  11. import androidx.core.content.ContextCompat;
  12. import androidx.fragment.app.FragmentActivity;
  13. import com.google.android.gms.location.FusedLocationProviderClient;
  14. import com.google.android.gms.location.LocationServices;
  15. import com.google.android.gms.maps.CameraUpdateFactory;
  16. import com.google.android.gms.maps.GoogleMap;
  17. import com.google.android.gms.maps.OnMapReadyCallback;
  18. import com.google.android.gms.maps.SupportMapFragment;
  19. import com.google.android.gms.maps.model.LatLng;
  20. import com.google.android.gms.maps.model.MarkerOptions;
  21. import com.google.android.gms.tasks.OnCompleteListener;
  22. import com.google.android.gms.tasks.Task;
  23. import com.google.firebase.database.DataSnapshot;
  24. import com.google.firebase.database.DatabaseError;
  25. import com.google.firebase.database.DatabaseReference;
  26. import com.google.firebase.database.FirebaseDatabase;
  27. import com.google.firebase.database.ValueEventListener;
  28. public class EarthquakeMapsActivity extends FragmentActivity implements OnMapReadyCallback {
  29. private static final String TAG = "MainActivity";
  30. private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
  31. private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
  32. //vars
  33. private Boolean mLocationPermissionsGranted = false;
  34. private GoogleMap mMap;
  35. private FusedLocationProviderClient mFusedLocationProviderClient;
  36. private DatabaseReference mDatenbank;
  37. private double breitengrad;
  38. private double laengengrad;
  39. @Override
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_earthquake_maps);
  43. getDataBaseValues(); //TODO Edward: Nur als Anmerkung, diese Methode erfolgt damit deine Methode getDeviceLocation Koordinaten aus der DB bekommt
  44. getLocationPermission();
  45. }
  46. private void getLocationPermission() {
  47. String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
  48. if (ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  49. mLocationPermissionsGranted = true;
  50. initMap();
  51. } else {
  52. ActivityCompat.requestPermissions(this, permissions, LOCATION_PERMISSION_REQUEST_CODE);
  53. }
  54. }
  55. @Override
  56. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  57. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  58. mLocationPermissionsGranted = false;
  59. switch (requestCode) {
  60. case LOCATION_PERMISSION_REQUEST_CODE: {
  61. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  62. mLocationPermissionsGranted = true;
  63. //initalize or map
  64. initMap();
  65. }
  66. }
  67. }
  68. }
  69. private void initMap() {
  70. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
  71. mapFragment.getMapAsync(this);
  72. }
  73. @Override
  74. public void onMapReady(GoogleMap googleMap) {
  75. Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show();
  76. mMap = googleMap;
  77. if (mLocationPermissionsGranted) {
  78. getDeviceLocation();
  79. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
  80. != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
  81. Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  82. return;
  83. }
  84. mMap.setMyLocationEnabled(true);
  85. }
  86. // Add a marker in Sydney and move the camera
  87. //LatLng sydney = new LatLng(-34, 151);
  88. //mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
  89. //mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
  90. }
  91. private void getDeviceLocation(){
  92. mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
  93. try {
  94. if (mLocationPermissionsGranted){
  95. final Task location = mFusedLocationProviderClient.getLastLocation();
  96. location.addOnCompleteListener(new OnCompleteListener() {
  97. @Override
  98. public void onComplete(@NonNull Task task) {
  99. if (task.isSuccessful()){
  100. Location currentLocation = (Location) task.getResult();
  101. currentLocation.setLatitude(breitengrad); //TODO Edward: Hier werden beispielweise Koordinaten aus der Datenbank verwendet für Gerät IDG1
  102. currentLocation.setLongitude(laengengrad);
  103. moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),15f);
  104. }
  105. else{
  106. Toast.makeText(EarthquakeMapsActivity.this, "Current Location unavailable", Toast.LENGTH_SHORT).show();
  107. }
  108. }
  109. });
  110. }
  111. }catch (SecurityException e){
  112. Log.e(TAG,"Device Location not found" + e.getMessage());
  113. }
  114. }
  115. private void moveCamera(LatLng latlng, float zoom){
  116. Log.d(TAG,"Latitude: "+latlng.latitude+"Longitude: "+latlng.longitude);
  117. mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, zoom));
  118. }
  119. public void getDataBaseValues()
  120. {
  121. mDatenbank = FirebaseDatabase.getInstance().getReference();
  122. mDatenbank.addValueEventListener(new ValueEventListener() {
  123. @Override
  124. public void onDataChange(@NonNull DataSnapshot snapshot) {
  125. processDataBaseValues(snapshot); //Daten Snapshot, Übergabe an processDataBaseValues
  126. }
  127. @Override
  128. public void onCancelled(@NonNull DatabaseError error) {
  129. getDataBaseFailure(error);
  130. }
  131. });
  132. }
  133. public void processDataBaseValues (DataSnapshot data)
  134. {
  135. //####### Hier wird beispielweise mit IDG1 gearbeitet, sollte aber klüger ausgearbeitet werden #######:
  136. String breitengradString = data.child("overview").child("IDG1").child("breitengrad").getValue().toString(); //TODO Aron/Team: Idee für passende ID je nach zugreifendem Gerät ==> Hardcoded oder flexibel?
  137. String laengengradString = data.child("overview").child("IDG1").child("laengengrad").getValue().toString();
  138. breitengrad = Double.parseDouble(breitengradString);
  139. laengengrad = Double.parseDouble(laengengradString);
  140. }
  141. public void getDataBaseFailure (DatabaseError error)
  142. {
  143. System.out.println("Fehler");
  144. Log.w("Datenbankfehler", error.toException());
  145. }
  146. //TODO Edward: Hier ist eine beispielhafte Methode mit der du Werte in der Datenbank setzen kannst
  147. public void setDataBaseValues()
  148. {
  149. mDatenbank = FirebaseDatabase.getInstance().getReference();
  150. mDatenbank.child("overview").child("IDG1").child("ip").setValue("10.00.00.001");
  151. mDatenbank.child("overview").child("IDG1").child("vibration").setValue(true);
  152. mDatenbank.child("overview").child("IDG1").child("timestamp").setValue(1113456789);
  153. mDatenbank.child("overview").child("IDG1").child("breitengrad").setValue(49.5);
  154. mDatenbank.child("overview").child("IDG1").child("laengengrad").setValue(11.5);
  155. mDatenbank.child("overview").child("IDG1").child("amplitude").setValue(1001);
  156. }
  157. }