Projektteil 2
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.

MainActivity.java 42KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. package de.edotzlaff.detection;
  2. import androidx.annotation.NonNull;
  3. import androidx.annotation.RequiresApi;
  4. import androidx.appcompat.app.AppCompatActivity;
  5. import androidx.core.app.ActivityCompat;
  6. import androidx.core.content.ContextCompat;
  7. import android.Manifest;
  8. import android.app.Dialog;
  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.content.pm.PackageManager;
  12. import android.hardware.Sensor;
  13. import android.hardware.SensorEvent;
  14. import android.hardware.SensorEventListener;
  15. import android.hardware.SensorManager;
  16. import android.location.Location;
  17. import android.os.Build;
  18. import android.os.Bundle;
  19. import android.os.CountDownTimer;
  20. import android.provider.ContactsContract;
  21. import android.provider.Settings;
  22. import android.util.Log;
  23. import android.view.View;
  24. import android.widget.Button;
  25. import android.widget.TextView;
  26. import android.widget.Toast;
  27. import com.google.android.gms.common.ConnectionResult;
  28. import com.google.android.gms.common.GoogleApiAvailability;
  29. import com.google.android.gms.location.FusedLocationProviderClient;
  30. import com.google.android.gms.location.LocationServices;
  31. import com.google.android.gms.maps.GoogleMap;
  32. import com.google.android.gms.tasks.OnCompleteListener;
  33. import com.google.android.gms.tasks.Task;
  34. import com.google.firebase.database.DataSnapshot;
  35. import com.google.firebase.database.DatabaseError;
  36. import com.google.firebase.database.DatabaseReference;
  37. import com.google.firebase.database.FirebaseDatabase;
  38. import com.google.firebase.database.ValueEventListener;
  39. import java.time.LocalDateTime;
  40. import java.time.ZoneOffset;
  41. import java.util.Calendar;
  42. import java.util.Objects;
  43. public class MainActivity extends AppCompatActivity {
  44. private static final String TAG = "MainActivity";
  45. private static final int ERROR_DIALOG_REQUEST = 9001;
  46. private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
  47. private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
  48. private Boolean mLocationPermissionsGranted = false;
  49. private GoogleMap mMap;
  50. private FusedLocationProviderClient mFusedLocationProviderClient;
  51. Long currentTime;
  52. Location currentLocation;
  53. private DatabaseReference mDatenbank;
  54. private double breitengrad;
  55. private double laengengrad;
  56. private boolean useOwnGPS = true;
  57. private int indexID = 1;
  58. private int writtenDevices = 1;
  59. private boolean allowCalculation = true;
  60. private boolean enableDisplayReset = true;
  61. //##########################################################################################################################################################################
  62. //################################################################## vvv SensorParameter vvv ##############################################################################
  63. private SensorManager mSensorManager;
  64. private static final float mUpperThreshold = 1.0f; // für Emulator auf 1.5 setzen //Für passende Empfindlichkeit auf 0.025f setzen ohne Smartphonehülle
  65. //private static final float mUpperThreshold = 1.0f; // für Emulator auf 1.5 setzen //Für passende Empfindlichkeit auf 0.025f setzen ohne Smartphonehülle
  66. private static final float mLowerThreshold = 0.5f; // für Emulator auf 0.5 setzen
  67. private static final long mShakeDetectionLockTimeMicroSeconds = 3500;
  68. private float mAccel;
  69. private float mAccelCurrent;
  70. private float mAccelLast;
  71. private boolean mShakeDetectionIsActive = false;
  72. private boolean mShakeDetected = false;
  73. private boolean allowShakeEvent = true;
  74. //################################################################## ^^^^ SensorParameter ^^^^ ############################################################################
  75. //##########################################################################################################################################################################
  76. @Override
  77. protected void onCreate(Bundle savedInstanceState) {
  78. super.onCreate(savedInstanceState);
  79. setContentView(R.layout.activity_main);
  80. if (isServiceOK()){
  81. init();
  82. }
  83. sensorManagementInit();
  84. initDataBase();
  85. getLocationPermission();
  86. getDataBaseValuesWithListener();
  87. }
  88. //################################################################## vvv Detection Code vvv ###################################################################################
  89. //##########################################################################################################################################################################
  90. private void sensorManagementInit()
  91. {
  92. //TextView txtEarthquake = (TextView) findViewById(R.id.txtEarthquake);
  93. mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  94. Objects.requireNonNull(mSensorManager).registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  95. mAccel = 1f;
  96. mAccelCurrent = SensorManager.GRAVITY_EARTH;
  97. mAccelLast = SensorManager.GRAVITY_EARTH;
  98. mShakeDetectionIsActive = false;
  99. mShakeDetected = false;
  100. }
  101. private final SensorEventListener mSensorListener = new SensorEventListener() {
  102. @Override
  103. public void onSensorChanged(SensorEvent event) {
  104. float x = event.values[0];
  105. float y = event.values[1];
  106. float z = event.values[2];
  107. mAccelLast = mAccelCurrent;
  108. mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
  109. float delta = mAccelCurrent - mAccelLast;
  110. mAccel = mAccel * 0.9f + delta;
  111. // Log.d(TAG,"mAccel: "+ mAccel);
  112. if (mShakeDetectionIsActive && !mShakeDetected) {
  113. if(Math.abs(mAccel) > mUpperThreshold) {
  114. new CountDownTimer(1000, 10) {
  115. public void onTick(long millisUntilFinished) {
  116. mShakeDetectionIsActive = false;
  117. /* if (Math.abs(mAccel) > mUpperThreshold) {
  118. mShakeDetectionIsActive = false;
  119. } else if (Math.abs(mAccel) < mLowerThreshold) {
  120. mShakeDetectionIsActive = true;
  121. this.cancel();
  122. }
  123. */
  124. }
  125. public void onFinish() {
  126. if (Math.abs(mAccel) > mUpperThreshold) {
  127. mShakeDetectionIsActive = false;
  128. mShakeDetected = true;
  129. earthquakeDetected();
  130. } else {
  131. mShakeDetectionIsActive = true;
  132. mShakeDetected = false;
  133. }
  134. }
  135. }.start();
  136. }
  137. }
  138. }
  139. @Override
  140. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  141. }
  142. };
  143. private void earthquakeDetected()
  144. {
  145. Toast.makeText(getApplicationContext(), "Earthquake detected", Toast.LENGTH_SHORT).show();
  146. Log.d(TAG,"!Earthquake detected!");
  147. //Hier wird bei Vibration in DB geschrieben
  148. getDataBaseValuesNoListenerForVibration();
  149. Button buttonReadyToDetect = (Button) findViewById(R.id.buttonReadyToDetect);
  150. buttonReadyToDetect.setEnabled(true);
  151. }
  152. //################################################################## ^^^^ Detection Code ^^^^ ###################################################################################
  153. //##########################################################################################################################################################################
  154. //##########################################################################################################################################################################
  155. //################################################################## vvv Get Location from Device vvv ####################################################################
  156. private void getLocationPermission() {
  157. String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
  158. if (ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  159. mLocationPermissionsGranted = true;
  160. getDeviceLocation();
  161. } else {
  162. ActivityCompat.requestPermissions(this, permissions, LOCATION_PERMISSION_REQUEST_CODE);
  163. }
  164. }
  165. private void getDeviceLocation(){
  166. mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
  167. try {
  168. if (mLocationPermissionsGranted){
  169. final Task location = mFusedLocationProviderClient.getLastLocation();
  170. location.addOnCompleteListener(new OnCompleteListener() {
  171. @Override
  172. public void onComplete(@NonNull Task task) {
  173. if (task.isSuccessful()){
  174. currentLocation = (Location) task.getResult();
  175. if(useOwnGPS)
  176. {
  177. breitengrad = currentLocation.getLatitude();
  178. laengengrad = currentLocation.getLongitude();
  179. }
  180. currentLocation.setLatitude(breitengrad);
  181. currentLocation.setLongitude(laengengrad);
  182. //setText();
  183. }
  184. else{
  185. Toast.makeText(MainActivity.this, "Current Location unavailable", Toast.LENGTH_SHORT).show();
  186. }
  187. }
  188. });
  189. }
  190. }catch (SecurityException e){
  191. Log.e(TAG,"Device Location not found" + e.getMessage());
  192. }
  193. }
  194. //################################################################## ^^^^ Get Location from Device ^^^^ ##################################################################
  195. //##########################################################################################################################################################################
  196. //##########################################################################################################################################################################
  197. //################################################################## vvv DB Code vvv #####################################################################################
  198. //###### Für Start der APP ####
  199. public void initDataBase()
  200. {
  201. getDataBaseValuesNoListener();
  202. }
  203. public void getDataBaseValuesNoListener()
  204. {
  205. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  206. mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
  207. @Override
  208. public void onComplete(@NonNull Task<DataSnapshot> task) {
  209. if (!task.isSuccessful()) {
  210. System.out.println("Datenbank Fehler in getDataBaseValuesNoListener");
  211. }
  212. else {
  213. analyzeForEmptyDB(task.getResult());
  214. }
  215. }
  216. });
  217. }
  218. //Methode bestimmt, ob DB mit leer IDGn Felder überhaupt vorhanden ist
  219. public void analyzeForEmptyDB(DataSnapshot data)
  220. {
  221. String androidid;
  222. String localedatetime;
  223. String breitengrad;
  224. String laengengrad;
  225. String timestamp;
  226. String ampltiude;
  227. String welle;
  228. int emptyIDG =0;
  229. for (int i=1; i<=data.getChildrenCount(); i++)
  230. {
  231. androidid = data.child("IDG" + i).child("a_androidid").getValue().toString();
  232. localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  233. breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  234. laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  235. timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString();
  236. ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString();
  237. welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString();
  238. if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty() && welle.isEmpty())
  239. {
  240. emptyIDG++;
  241. }else{
  242. emptyIDG--;
  243. }
  244. }
  245. //Wenn DB nicht vorhanden ODER leer ist, erstelle diese DB mit IDG 1-5
  246. if(emptyIDG == data.getChildrenCount())
  247. {
  248. for (int i=1; i<=5; i++)
  249. {
  250. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  251. writeEmptyToSecondDataBase(i);
  252. }
  253. }
  254. }
  255. }
  256. @RequiresApi(api = Build.VERSION_CODES.O)
  257. public void writeEmptyToSecondDataBase(int k)
  258. {
  259. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  260. mDatenbank.child("IDG" + k).child("a_androidid").setValue("");
  261. mDatenbank.child("IDG" + k).child("b_localdatetime").setValue("");
  262. mDatenbank.child("IDG" + k).child("d_breitengrad").setValue("");
  263. mDatenbank.child("IDG" + k).child("e_laengengrad").setValue("");
  264. mDatenbank.child("IDG" + k).child("h_timestamp").setValue("");
  265. mDatenbank.child("IDG" + k).child("i_amplitude").setValue("");
  266. mDatenbank.child("IDG" + k).child("w_wellengeschwindigkeit").setValue("");
  267. }
  268. //###### Bei Vibration der APP ####
  269. public void getDataBaseValuesNoListenerForVibration()
  270. {
  271. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  272. mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
  273. @Override
  274. public void onComplete(@NonNull Task<DataSnapshot> task) {
  275. if (!task.isSuccessful()) {
  276. System.out.println("Datenbank Fehler in getDataBaseValuesNoListener");
  277. }
  278. else {
  279. checkForEmptyIDG(task.getResult());
  280. }
  281. }
  282. });
  283. }
  284. public void checkForEmptyIDG(DataSnapshot data)
  285. {
  286. for (int i=1; i<=data.getChildrenCount(); i++)
  287. {
  288. if(analyzeForEmptyIDG(data,i))
  289. {
  290. writeDeviceToDB(i);
  291. break;
  292. }
  293. }
  294. }
  295. public boolean analyzeForEmptyIDG(DataSnapshot data, int i)
  296. {
  297. String androidid;
  298. String localedatetime;
  299. String breitengrad;
  300. String laengengrad;
  301. String timestamp;
  302. String ampltiude;
  303. String welle;
  304. androidid = data.child("IDG" + i).child("a_androidid").getValue().toString();
  305. localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  306. breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  307. laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  308. timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString();
  309. ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString();
  310. welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString();
  311. if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty() && welle.isEmpty())
  312. {
  313. return true;
  314. }else
  315. {
  316. return false;
  317. }
  318. }
  319. public void writeDeviceToDB (int k)
  320. {
  321. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  322. mDatenbank.child("IDG" + k).child("a_androidid").setValue(getandroidid());
  323. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  324. mDatenbank.child("IDG" + k).child("b_localdatetime").setValue(LocalDateTime.now(ZoneOffset.UTC).toString());
  325. }
  326. mDatenbank.child("IDG" + k).child("d_breitengrad").setValue(currentLocation.getLatitude());
  327. mDatenbank.child("IDG" + k).child("e_laengengrad").setValue(currentLocation.getLongitude());
  328. mDatenbank.child("IDG" + k).child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  329. mDatenbank.child("IDG" + k).child("i_amplitude").setValue(1000);
  330. mDatenbank.child("IDG" + k).child("w_wellengeschwindigkeit").setValue(10);
  331. }
  332. //###### Bei Eintragungen in der DB ####
  333. public void getDataBaseValuesWithListener()
  334. {
  335. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  336. mDatenbank.addValueEventListener(new ValueEventListener() {
  337. @Override
  338. public void onDataChange(@NonNull DataSnapshot snapshot) {
  339. analyzeDBchanges(snapshot);
  340. }
  341. @Override
  342. public void onCancelled(@NonNull DatabaseError error) {
  343. getDataBaseFailure(error);
  344. }
  345. });
  346. }
  347. public void analyzeDBchanges(DataSnapshot data)
  348. {
  349. for (int i=1; i<=data.getChildrenCount(); i++)
  350. {
  351. if(analyzeForFullIDG(data,i) || analyzeForEmptyIDG(data,i))
  352. {
  353. TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1);
  354. TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2);
  355. TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3);
  356. TextView txtDevice4 = (TextView) findViewById(R.id.txtdevice4);
  357. String dbSlotStringContent = getSlotString(data,i);
  358. String displayContent;
  359. switch (i){
  360. case 1:
  361. displayContent = txtDevice1.getText().toString();
  362. if(!displayContent.equals(dbSlotStringContent))
  363. {
  364. if(analyzeForEmptyIDG(data,i))
  365. {
  366. txtDevice1.setText("");
  367. }else
  368. {
  369. txtDevice1.setText(dbSlotStringContent);
  370. }
  371. }
  372. break;
  373. case 2:
  374. displayContent = txtDevice2.getText().toString();
  375. if(!displayContent.equals(dbSlotStringContent))
  376. {
  377. if(analyzeForEmptyIDG(data,i))
  378. {
  379. txtDevice2.setText("");
  380. }else
  381. {
  382. txtDevice2.setText(dbSlotStringContent);
  383. }
  384. }
  385. break;
  386. case 3:
  387. displayContent = txtDevice3.getText().toString();
  388. if(!displayContent.equals(dbSlotStringContent))
  389. {
  390. if(analyzeForEmptyIDG(data,i))
  391. {
  392. txtDevice3.setText("");
  393. }else
  394. {
  395. txtDevice3.setText(dbSlotStringContent);
  396. }
  397. }
  398. break;
  399. case 4:
  400. displayContent = txtDevice4.getText().toString();
  401. if(!displayContent.equals(dbSlotStringContent))
  402. {
  403. if(analyzeForEmptyIDG(data,i))
  404. {
  405. txtDevice4.setText("");
  406. }else
  407. {
  408. txtDevice4.setText(dbSlotStringContent);
  409. }
  410. }
  411. break;
  412. default:
  413. break;
  414. }
  415. }
  416. }
  417. int takenIDG = 0;
  418. for (int i=1; i<=data.getChildrenCount(); i++)
  419. {
  420. if(analyzeForFullIDG(data,i))
  421. {
  422. takenIDG++;
  423. }
  424. }
  425. if(takenIDG >= 3 && allowCalculation)
  426. {
  427. Toast.makeText(MainActivity.this, "3 Geräte regisrtiert - Berechnung möglich!", Toast.LENGTH_SHORT).show();
  428. allowCalculation = false;
  429. Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation);
  430. btnEarthquake.setEnabled(true);
  431. }
  432. }
  433. public String getSlotString(DataSnapshot data,int i)
  434. {
  435. String androidid = data.child("IDG" + i).child("a_androidid").getValue().toString();
  436. String localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  437. String breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  438. String laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  439. String timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString();
  440. String ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString();
  441. String databaseSlotString = "Device ID " + i + ": "+ androidid + "\n" + "Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad +"\n" + "Time Stamp: "+ timestamp + "\n" + "LocalDateTime: " + localedatetime +"\n"+ "Amplitude: "+ ampltiude+"\n";
  442. return databaseSlotString;
  443. }
  444. public boolean analyzeForFullIDG(DataSnapshot data, int i)
  445. {
  446. String androidid = data.child("IDG" + i).child("a_androidid").getValue().toString();
  447. String localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  448. String breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  449. String laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  450. String timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString();
  451. String ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString();
  452. String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString();
  453. if(!androidid.isEmpty() && !localedatetime.isEmpty() && !breitengrad.isEmpty() && !laengengrad.isEmpty() && !timestamp.isEmpty() && !ampltiude.isEmpty() && !welle.isEmpty())
  454. {
  455. return true;
  456. }else
  457. {
  458. return false;
  459. }
  460. }
  461. public String getandroidid ()
  462. {
  463. return Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
  464. }
  465. public void getDataBaseFailure (DatabaseError error)
  466. {
  467. System.out.println("Fehler");
  468. Log.w("Datenbankfehler", error.toException());
  469. }
  470. //################################################################## ^^^^ DB Code ^^^^ ###################################################################################
  471. //##########################################################################################################################################################################
  472. //##########################################################################################################################################################################
  473. //################################################################## vvv Maps Code vvv ###################################################################################
  474. public boolean isServiceOK(){
  475. Log.d(TAG, "isServicesOK(): checking google services version");
  476. int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this);
  477. if (available== ConnectionResult.SUCCESS){
  478. Log.d(TAG,"isServicesOK: Google Play Services is working");
  479. return true;
  480. }
  481. else if (GoogleApiAvailability.getInstance().isUserResolvableError(available)){
  482. Log.d(TAG, "isServicesOK(): an error occured but we can fix it");
  483. Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR_DIALOG_REQUEST);
  484. dialog.show();
  485. }
  486. else {
  487. Toast.makeText(this, "You can`t make map request", Toast.LENGTH_SHORT).show();
  488. }
  489. return false;
  490. }
  491. private void init() {
  492. Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation);
  493. btnEarthquake.setEnabled(false);
  494. btnEarthquake.setOnClickListener(new View.OnClickListener() {
  495. @Override
  496. public void onClick(View v) {
  497. Intent intent = new Intent(MainActivity.this, EarthquakeLocation.class);
  498. startActivity(intent);
  499. }
  500. });
  501. Button btnResetDB = (Button) findViewById(R.id.btnResetDB);
  502. btnResetDB.setOnClickListener(new View.OnClickListener() {
  503. @RequiresApi(api = Build.VERSION_CODES.O)
  504. @Override
  505. public void onClick(View v) {
  506. for (int i=1; i<=5; i++)
  507. {
  508. writeEmptyToSecondDataBase(i);
  509. }
  510. }
  511. });
  512. Button btnReadyToDetect = (Button) findViewById(R.id.buttonReadyToDetect);
  513. btnReadyToDetect.setOnClickListener(new View.OnClickListener() {
  514. @RequiresApi(api = Build.VERSION_CODES.O)
  515. @Override
  516. public void onClick(View v) {
  517. mShakeDetectionIsActive = true;
  518. mShakeDetected = false;
  519. btnReadyToDetect.setEnabled(false);
  520. }
  521. });
  522. //TODO Benötigt für Testzwecke (Epizentrum) für Jan
  523. Button btnGerichtet = (Button) findViewById(R.id.btnGerichtet1);
  524. btnGerichtet.setOnClickListener(new View.OnClickListener() {
  525. @RequiresApi(api = Build.VERSION_CODES.O)
  526. @Override
  527. public void onClick(View v) {
  528. getDataBaseValuesWithListener();
  529. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  530. mDatenbank.child("IDG1").child("a_androidid").setValue("ID1");
  531. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  532. mDatenbank.child("IDG1").child("b_localdatetime").setValue("2021-06-25T19:00:00.000");
  533. }
  534. mDatenbank.child("IDG1").child("d_breitengrad").setValue(49.448290362613854);
  535. mDatenbank.child("IDG1").child("e_laengengrad").setValue(11.097272994499544);
  536. mDatenbank.child("IDG1").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  537. mDatenbank.child("IDG1").child("i_amplitude").setValue(1000);
  538. mDatenbank.child("IDG1").child("w_wellengeschwindigkeit").setValue(10);
  539. mDatenbank.child("IDG2").child("a_androidid").setValue("ID2");
  540. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  541. mDatenbank.child("IDG2").child("b_localdatetime").setValue("2021-06-25T19:01:40.000");
  542. }
  543. mDatenbank.child("IDG2").child("d_breitengrad").setValue(49.44466671859845);
  544. mDatenbank.child("IDG2").child("e_laengengrad").setValue(11.11073498515257);
  545. mDatenbank.child("IDG2").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  546. mDatenbank.child("IDG2").child("i_amplitude").setValue(1000);
  547. mDatenbank.child("IDG2").child("w_wellengeschwindigkeit").setValue(10);
  548. mDatenbank.child("IDG3").child("a_androidid").setValue("ID3");
  549. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  550. mDatenbank.child("IDG3").child("b_localdatetime").setValue("2021-06-25T19:03:20.000");
  551. }
  552. mDatenbank.child("IDG3").child("d_breitengrad").setValue(49.44263735292373);
  553. mDatenbank.child("IDG3").child("e_laengengrad").setValue(11.124199910730779);
  554. mDatenbank.child("IDG3").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  555. mDatenbank.child("IDG3").child("i_amplitude").setValue(1000);
  556. mDatenbank.child("IDG3").child("w_wellengeschwindigkeit").setValue(10);
  557. }
  558. });
  559. Button btnDreiGoogle = (Button) findViewById(R.id.btnDreieckGoogle);
  560. btnDreiGoogle.setOnClickListener(new View.OnClickListener() {
  561. @RequiresApi(api = Build.VERSION_CODES.O)
  562. @Override
  563. public void onClick(View v) {
  564. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  565. mDatenbank.child("IDG1").child("a_androidid").setValue("ID1");
  566. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  567. mDatenbank.child("IDG1").child("b_localdatetime").setValue("2021-06-25T19:00:00.000");
  568. }
  569. mDatenbank.child("IDG1").child("d_breitengrad").setValue(49.449588027612);
  570. mDatenbank.child("IDG1").child("e_laengengrad").setValue(11.069961699379434);
  571. mDatenbank.child("IDG1").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  572. mDatenbank.child("IDG1").child("i_amplitude").setValue(1000);
  573. mDatenbank.child("IDG1").child("w_wellengeschwindigkeit").setValue(10);
  574. mDatenbank.child("IDG2").child("a_androidid").setValue("ID2");
  575. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  576. mDatenbank.child("IDG2").child("b_localdatetime").setValue("2021-06-25T19:01:40.000");
  577. }
  578. mDatenbank.child("IDG2").child("d_breitengrad").setValue(49.45813339772139);
  579. mDatenbank.child("IDG2").child("e_laengengrad").setValue(11.105891230575331);
  580. mDatenbank.child("IDG2").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  581. mDatenbank.child("IDG2").child("i_amplitude").setValue(1000);
  582. mDatenbank.child("IDG2").child("w_wellengeschwindigkeit").setValue(10);
  583. mDatenbank.child("IDG3").child("a_androidid").setValue("ID3");
  584. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  585. mDatenbank.child("IDG3").child("b_localdatetime").setValue("2021-06-25T19:03:20.000");
  586. }
  587. mDatenbank.child("IDG3").child("d_breitengrad").setValue(49.42208575064953);
  588. mDatenbank.child("IDG3").child("e_laengengrad").setValue(11.096983614292839);
  589. mDatenbank.child("IDG3").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  590. mDatenbank.child("IDG3").child("i_amplitude").setValue(1000);
  591. mDatenbank.child("IDG3").child("w_wellengeschwindigkeit").setValue(10);
  592. }
  593. });
  594. Button btnDreiEigen = (Button) findViewById(R.id.btnDreieckEigen);
  595. btnDreiEigen.setOnClickListener(new View.OnClickListener() {
  596. @RequiresApi(api = Build.VERSION_CODES.O)
  597. @Override
  598. public void onClick(View v) {
  599. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  600. mDatenbank.child("IDG1").child("a_androidid").setValue("ID1");
  601. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  602. mDatenbank.child("IDG1").child("b_localdatetime").setValue("2021-06-25T19:00:00.000");
  603. }
  604. mDatenbank.child("IDG1").child("d_breitengrad").setValue(49.44796056728842);
  605. mDatenbank.child("IDG1").child("e_laengengrad").setValue(11.069682589518582);
  606. mDatenbank.child("IDG1").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  607. mDatenbank.child("IDG1").child("i_amplitude").setValue(1000);
  608. mDatenbank.child("IDG1").child("w_wellengeschwindigkeit").setValue(10);
  609. mDatenbank.child("IDG2").child("a_androidid").setValue("ID2");
  610. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  611. mDatenbank.child("IDG2").child("b_localdatetime").setValue("2021-06-25T19:01:40.000");
  612. }
  613. mDatenbank.child("IDG2").child("d_breitengrad").setValue(49.445169649958295);
  614. mDatenbank.child("IDG2").child("e_laengengrad").setValue(11.110874403601176);
  615. mDatenbank.child("IDG2").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  616. mDatenbank.child("IDG2").child("i_amplitude").setValue(1000);
  617. mDatenbank.child("IDG2").child("w_wellengeschwindigkeit").setValue(10);
  618. mDatenbank.child("IDG3").child("a_androidid").setValue("ID3");
  619. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  620. mDatenbank.child("IDG3").child("b_localdatetime").setValue("2021-06-25T19:03:20.000");
  621. }
  622. mDatenbank.child("IDG3").child("d_breitengrad").setValue(49.42197662865119);
  623. mDatenbank.child("IDG3").child("e_laengengrad").setValue(11.07097763125116);
  624. mDatenbank.child("IDG3").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  625. mDatenbank.child("IDG3").child("i_amplitude").setValue(1000);
  626. mDatenbank.child("IDG3").child("w_wellengeschwindigkeit").setValue(10);
  627. }
  628. });
  629. Button btnLinieGoogle= (Button) findViewById(R.id.btnLinieGoogle);
  630. btnLinieGoogle.setOnClickListener(new View.OnClickListener() {
  631. @RequiresApi(api = Build.VERSION_CODES.O)
  632. @Override
  633. public void onClick(View v) {
  634. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  635. mDatenbank.child("IDG1").child("a_androidid").setValue("ID1");
  636. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  637. mDatenbank.child("IDG1").child("b_localdatetime").setValue("2021-06-25T19:00:00.000");
  638. }
  639. mDatenbank.child("IDG1").child("d_breitengrad").setValue(49.439093816961254);
  640. mDatenbank.child("IDG1").child("e_laengengrad").setValue(11.087992224141008);
  641. mDatenbank.child("IDG1").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  642. mDatenbank.child("IDG1").child("i_amplitude").setValue(1000);
  643. mDatenbank.child("IDG1").child("w_wellengeschwindigkeit").setValue(10);
  644. mDatenbank.child("IDG2").child("a_androidid").setValue("ID2");
  645. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  646. mDatenbank.child("IDG2").child("b_localdatetime").setValue("2021-06-25T19:01:40.000");
  647. }
  648. mDatenbank.child("IDG2").child("d_breitengrad").setValue(49.43058961031174);
  649. mDatenbank.child("IDG2").child("e_laengengrad").setValue(11.092487606432716);
  650. mDatenbank.child("IDG2").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  651. mDatenbank.child("IDG2").child("i_amplitude").setValue(1000);
  652. mDatenbank.child("IDG2").child("w_wellengeschwindigkeit").setValue(10);
  653. mDatenbank.child("IDG3").child("a_androidid").setValue("ID3");
  654. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  655. mDatenbank.child("IDG3").child("b_localdatetime").setValue("2021-06-25T19:03:20.000");
  656. }
  657. mDatenbank.child("IDG3").child("d_breitengrad").setValue(49.42208989434345);
  658. mDatenbank.child("IDG3").child("e_laengengrad").setValue(11.096991470517569);
  659. mDatenbank.child("IDG3").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  660. mDatenbank.child("IDG3").child("i_amplitude").setValue(1000);
  661. mDatenbank.child("IDG3").child("w_wellengeschwindigkeit").setValue(10);
  662. }
  663. });
  664. Button btnLinieEigen = (Button) findViewById(R.id.btnLinieEigen);
  665. btnLinieEigen.setOnClickListener(new View.OnClickListener() {
  666. @RequiresApi(api = Build.VERSION_CODES.O)
  667. @Override
  668. public void onClick(View v) {
  669. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  670. mDatenbank.child("IDG1").child("a_androidid").setValue("ID1");
  671. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  672. mDatenbank.child("IDG1").child("b_localdatetime").setValue("2021-06-25T19:00:00.000");
  673. }
  674. mDatenbank.child("IDG1").child("d_breitengrad").setValue(49.44709382725857);
  675. mDatenbank.child("IDG1").child("e_laengengrad").setValue(11.069646529622538);
  676. mDatenbank.child("IDG1").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  677. mDatenbank.child("IDG1").child("i_amplitude").setValue(1000);
  678. mDatenbank.child("IDG1").child("w_wellengeschwindigkeit").setValue(10);
  679. mDatenbank.child("IDG2").child("a_androidid").setValue("ID2");
  680. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  681. mDatenbank.child("IDG2").child("b_localdatetime").setValue("2021-06-25T19:01:40.000");
  682. }
  683. mDatenbank.child("IDG2").child("d_breitengrad").setValue(49.446938212388574);
  684. mDatenbank.child("IDG2").child("e_laengengrad").setValue(11.055889659014166);
  685. mDatenbank.child("IDG2").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  686. mDatenbank.child("IDG2").child("i_amplitude").setValue(1000);
  687. mDatenbank.child("IDG2").child("w_wellengeschwindigkeit").setValue(10);
  688. mDatenbank.child("IDG3").child("a_androidid").setValue("ID3");
  689. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  690. mDatenbank.child("IDG3").child("b_localdatetime").setValue("2021-06-25T19:03:20.000");
  691. }
  692. mDatenbank.child("IDG3").child("d_breitengrad").setValue(49.447447927483005);
  693. mDatenbank.child("IDG3").child("e_laengengrad").setValue(11.042050722727316);
  694. mDatenbank.child("IDG3").child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis());
  695. mDatenbank.child("IDG3").child("i_amplitude").setValue(1000);
  696. mDatenbank.child("IDG3").child("w_wellengeschwindigkeit").setValue(10);
  697. }
  698. });
  699. }
  700. //################################################################## ^^^^ Maps Code ^^^^ ##################################################################
  701. //###########################################################################################################################################################
  702. }
  703. /*
  704. public void setDisplayText(DataSnapshot data, int i)
  705. {
  706. String androidid = data.child("IDG" + i).child("a_androidid").getValue().toString();
  707. String localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  708. String breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  709. String laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  710. String timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString();
  711. String ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString();
  712. TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1);
  713. TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2);
  714. TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3);
  715. TextView txtDevice4 = (TextView) findViewById(R.id.txtdevice4);
  716. switch (i){
  717. case 1:
  718. txtDevice1.setText("Device ID 1: "+ androidid + "\n" + "Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad +"\n" + "Time Stamp: "+ timestamp + "\n" + "LocalDateTime: " + localedatetime +"\n"+ "Amplitude: "+ ampltiude+"\n");
  719. break;
  720. case 2:
  721. txtDevice2.setText("Device ID 2: "+ androidid + "\n" + "Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad +"\n" + "Time Stamp: "+ timestamp + "\n" + "LocalDateTime: " + localedatetime +"\n"+ "Amplitude: "+ ampltiude+"\n");
  722. break;
  723. case 3:
  724. txtDevice3.setText("Device ID 3: "+ androidid + "\n" + "Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad +"\n" + "Time Stamp: "+ timestamp + "\n" + "LocalDateTime: " + localedatetime +"\n"+ "Amplitude: "+ ampltiude+"\n");
  725. break;
  726. case 4:
  727. txtDevice4.setText("Device ID 4: "+ androidid + "\n" + "Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad +"\n" + "Time Stamp: "+ timestamp + "\n" + "LocalDateTime: " + localedatetime +"\n"+ "Amplitude: "+ ampltiude+"\n");
  728. break;
  729. default:
  730. break;
  731. }
  732. }
  733. */
  734. /*
  735. public void resetDisplayText()
  736. {
  737. Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation);
  738. btnEarthquake.setEnabled(false);
  739. TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1);
  740. TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2);
  741. TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3);
  742. TextView txtDevice4 = (TextView) findViewById(R.id.txtdevice4);
  743. txtDevice1.setText("");
  744. txtDevice2.setText("");
  745. txtDevice3.setText("");
  746. txtDevice4.setText("");
  747. allowCalculation=true;
  748. }
  749. */