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 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package de.edotzlaff.detection;
  2. import androidx.annotation.NonNull;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import androidx.core.app.ActivityCompat;
  5. import androidx.core.content.ContextCompat;
  6. import android.Manifest;
  7. import android.app.Dialog;
  8. import android.content.Context;
  9. import android.content.Intent;
  10. import android.content.pm.PackageManager;
  11. import android.hardware.Sensor;
  12. import android.hardware.SensorEvent;
  13. import android.hardware.SensorEventListener;
  14. import android.hardware.SensorManager;
  15. import android.location.Location;
  16. import android.os.Bundle;
  17. import android.os.CountDownTimer;
  18. import android.util.Log;
  19. import android.view.View;
  20. import android.widget.Button;
  21. import android.widget.TextView;
  22. import android.widget.Toast;
  23. import com.google.android.gms.common.ConnectionResult;
  24. import com.google.android.gms.common.GoogleApiAvailability;
  25. import com.google.android.gms.location.FusedLocationProviderClient;
  26. import com.google.android.gms.location.LocationServices;
  27. import com.google.android.gms.maps.GoogleMap;
  28. import com.google.android.gms.maps.OnMapReadyCallback;
  29. import com.google.android.gms.maps.SupportMapFragment;
  30. import com.google.android.gms.maps.model.LatLng;
  31. import com.google.android.gms.tasks.OnCompleteListener;
  32. import com.google.android.gms.tasks.Task;
  33. import org.w3c.dom.Text;
  34. import java.util.Calendar;
  35. import java.util.Objects;
  36. public class MainActivity extends AppCompatActivity {
  37. private static final String TAG = "MainActivity";
  38. private static final int ERROR_DIALOG_REQUEST = 9001;
  39. private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
  40. private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
  41. private Boolean mLocationPermissionsGranted = false;
  42. private GoogleMap mMap;
  43. private FusedLocationProviderClient mFusedLocationProviderClient;
  44. Long currentTime;
  45. Location currentLocation;
  46. // private DatabaseReference mDatenbank;
  47. private double breitengrad;
  48. private double laengengrad;
  49. private boolean useOwnGPS = true;
  50. private int indexID = 1;
  51. //##########################################################################################################################################################################
  52. //################################################################## vvv SensorParameter vvv ##############################################################################
  53. private SensorManager mSensorManager;
  54. private static final float mUpperThreshold = 1.0f; // für Emulator auf 1.5 setzen
  55. private static final float mLowerThreshold = 0.5f; // für Emulator auf 0.5 setzen
  56. private static final long mShakeDetectionLockTimeMicroSeconds = 1000;
  57. private float mAccel;
  58. private float mAccelCurrent;
  59. private float mAccelLast;
  60. private boolean mShakeDetectionIsActive = false;
  61. private boolean mShakeDetected = false;
  62. private boolean allowShakeEvent = true;
  63. //################################################################## ^^^^ SensorParameter ^^^^ ############################################################################
  64. //##########################################################################################################################################################################
  65. @Override
  66. protected void onCreate(Bundle savedInstanceState) {
  67. super.onCreate(savedInstanceState);
  68. setContentView(R.layout.activity_main);
  69. if (isServiceOK()){
  70. init();
  71. }
  72. //Detection funktion here
  73. sensorManagementInit();
  74. getLocationPermission();
  75. //DB function here
  76. }
  77. //################################################################## vvv Detection Code vvv ###################################################################################
  78. //##########################################################################################################################################################################
  79. private void sensorManagementInit()
  80. {
  81. //TextView txtEarthquake = (TextView) findViewById(R.id.txtEarthquake);
  82. mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  83. Objects.requireNonNull(mSensorManager).registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  84. mAccel = 1f;
  85. mAccelCurrent = SensorManager.GRAVITY_EARTH;
  86. mAccelLast = SensorManager.GRAVITY_EARTH;
  87. mShakeDetectionIsActive = true;
  88. mShakeDetected = false;
  89. }
  90. private final SensorEventListener mSensorListener = new SensorEventListener() {
  91. @Override
  92. public void onSensorChanged(SensorEvent event) {
  93. float x = event.values[0];
  94. float y = event.values[1];
  95. float z = event.values[2];
  96. mAccelLast = mAccelCurrent;
  97. mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
  98. float delta = mAccelCurrent - mAccelLast;
  99. mAccel = mAccel * 0.9f + delta;
  100. Log.d(TAG,"mAccel: "+ mAccel);
  101. if (mShakeDetectionIsActive && !mShakeDetected) {
  102. if(Math.abs(mAccel) > mUpperThreshold) {
  103. new CountDownTimer(500, 10) {
  104. public void onTick(long millisUntilFinished) {
  105. mShakeDetectionIsActive = false;
  106. /* if (Math.abs(mAccel) > mUpperThreshold) {
  107. mShakeDetectionIsActive = false;
  108. } else if (Math.abs(mAccel) < mLowerThreshold) {
  109. mShakeDetectionIsActive = true;
  110. this.cancel();
  111. }
  112. */
  113. }
  114. public void onFinish() {
  115. if (Math.abs(mAccel) > mUpperThreshold) {
  116. mShakeDetectionIsActive = false;
  117. mShakeDetected = true;
  118. earthquakeDetected();
  119. } else {
  120. mShakeDetectionIsActive = true;
  121. mShakeDetected = false;
  122. }
  123. }
  124. }.start();
  125. }
  126. }
  127. }
  128. @Override
  129. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  130. }
  131. };
  132. private void earthquakeDetected()
  133. {
  134. Toast.makeText(getApplicationContext(), "!Earthquake detected!", Toast.LENGTH_SHORT).show();
  135. Log.d(TAG,"!Earthquake detected!");
  136. //setDataBaseValues();
  137. new CountDownTimer(mShakeDetectionLockTimeMicroSeconds, 100) {
  138. public void onTick(long millisUntilFinished) {
  139. Log.d(TAG,"Earthquake: "+ millisUntilFinished + " ms");
  140. }
  141. public void onFinish() {
  142. Log.d(TAG,"Earthquake Detection is Unlocked: ");
  143. mShakeDetectionIsActive = true;
  144. mShakeDetected = false;
  145. }
  146. }.start();
  147. }
  148. //################################################################## ^^^^ Detection Code ^^^^ ###################################################################################
  149. //##########################################################################################################################################################################
  150. //##########################################################################################################################################################################
  151. //################################################################## vvv Get Location from Device vvv ####################################################################
  152. private void getLocationPermission() {
  153. String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
  154. if (ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  155. mLocationPermissionsGranted = true;
  156. getDeviceLocation();
  157. } else {
  158. ActivityCompat.requestPermissions(this, permissions, LOCATION_PERMISSION_REQUEST_CODE);
  159. }
  160. }
  161. private void getDeviceLocation(){
  162. mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
  163. try {
  164. if (mLocationPermissionsGranted){
  165. final Task location = mFusedLocationProviderClient.getLastLocation();
  166. location.addOnCompleteListener(new OnCompleteListener() {
  167. @Override
  168. public void onComplete(@NonNull Task task) {
  169. if (task.isSuccessful()){
  170. currentLocation = (Location) task.getResult();
  171. if(useOwnGPS)
  172. {
  173. breitengrad = currentLocation.getLatitude();
  174. laengengrad = currentLocation.getLongitude();
  175. }
  176. currentLocation.setLatitude(breitengrad);
  177. currentLocation.setLongitude(laengengrad);
  178. setText();
  179. }
  180. else{
  181. Toast.makeText(MainActivity.this, "Current Location unavailable", Toast.LENGTH_SHORT).show();
  182. }
  183. }
  184. });
  185. }
  186. }catch (SecurityException e){
  187. Log.e(TAG,"Device Location not found" + e.getMessage());
  188. }
  189. }
  190. //################################################################## ^^^^ Get Location from Device ^^^^ ##################################################################
  191. //##########################################################################################################################################################################
  192. //##########################################################################################################################################################################
  193. //################################################################## vvv DB Code vvv #####################################################################################
  194. //TODO Aron
  195. //################################################################## ^^^^ DB Code ^^^^ ###################################################################################
  196. //##########################################################################################################################################################################
  197. //##########################################################################################################################################################################
  198. //################################################################## vvv Set Text of Device 1/2/3 on MainActivity vvv ####################################################
  199. private void setText(){
  200. TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1);
  201. TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2);
  202. TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3);
  203. TextView txtDevice4 = (TextView) findViewById(R.id.txtdevice4);
  204. txtDevice1.setText("Device 1"+"\n"+"Time Stamp: "+ Calendar.getInstance().getTimeInMillis()+"\n"+"Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad+"\n");
  205. txtDevice2.setText("Device 2"+"\n"+"Time Stamp: "+ Calendar.getInstance().getTimeInMillis()+"\n"+"Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad+"\n");
  206. txtDevice3.setText("Device 3"+"\n"+"Time Stamp: "+ Calendar.getInstance().getTimeInMillis()+"\n"+"Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad+"\n");
  207. txtDevice4.setText("Device 4"+"\n"+"Time Stamp: "+ Calendar.getInstance().getTimeInMillis()+"\n"+"Latitude: "+breitengrad+"\n"+ "Longitude: "+ laengengrad+"\n");
  208. }
  209. //################################################################## ^^^^ Set Text of Device 1/2/3 on MainActivity ^^^^ ##################################################
  210. //##########################################################################################################################################################################
  211. //##########################################################################################################################################################################
  212. //################################################################## vvv Maps Code vvv ###################################################################################
  213. public boolean isServiceOK(){
  214. Log.d(TAG, "isServicesOK(): checking google services version");
  215. int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this);
  216. if (available== ConnectionResult.SUCCESS){
  217. Log.d(TAG,"isServicesOK: Google Play Services is working");
  218. return true;
  219. }
  220. else if (GoogleApiAvailability.getInstance().isUserResolvableError(available)){
  221. Log.d(TAG, "isServicesOK(): an error occured but we can fix it");
  222. Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR_DIALOG_REQUEST);
  223. dialog.show();
  224. }
  225. else {
  226. Toast.makeText(this, "You can`t make map request", Toast.LENGTH_SHORT).show();
  227. }
  228. return false;
  229. }
  230. private void init() {
  231. Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation);
  232. btnEarthquake.setOnClickListener(new View.OnClickListener() {
  233. @Override
  234. public void onClick(View v) {
  235. Intent intent = new Intent(MainActivity.this, EarthquakeLocation.class);
  236. startActivity(intent);
  237. }
  238. });
  239. }
  240. //################################################################## ^^^^ Maps Code ^^^^ ##################################################################
  241. //###########################################################################################################################################################
  242. }