Advertisement
Guest User

Untitled

a guest
Mar 16th, 2021
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1.  
  2. import android.app.Service;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.hardware.Sensor;
  6. import android.hardware.SensorEvent;
  7. import android.hardware.SensorEventListener;
  8. import android.hardware.SensorManager;
  9. import android.os.AsyncTask;
  10. import android.os.IBinder;
  11. import android.os.PowerManager;
  12.  
  13. import java.io.FileOutputStream;
  14.  
  15. public class SensorsListener extends Service implements SensorEventListener {
  16. private SensorManager sensorManager;
  17. private Sensor accelerometer;
  18. private Sensor gyroscopemeter;
  19. private Sensor magnetometer;
  20. private Sensor barometer;
  21. private int speed = SensorManager.SENSOR_DELAY_UI;
  22.  
  23. private float[] accelerometerVector = new float[3];
  24. private float[] magneticVector = new float[3];
  25. private float[] gyroVector = new float[3];
  26. private float pressure = 0;
  27.  
  28. private int acceleroCount = 0;
  29. private int gyroCount= 0;
  30. private int magnetoCount = 0;
  31.  
  32. private int acceleroAccuracy = 0;
  33. private int gyroAccuracy = 0;
  34. private int magnetoAccuracy = 0;
  35. private int pressureAccuracy = 0;
  36.  
  37. private long timestamp;
  38. private FileOutputStream fileOutputStream;
  39.  
  40. private PowerManager.WakeLock mWakeLock;
  41.  
  42. // GPS
  43. static double latitude;
  44. static double longitude;
  45.  
  46. private void printData()
  47. {
  48. System.out.println("Latitude : " + latitude);
  49. System.out.println("Longitude : " + longitude);
  50. }
  51.  
  52. @Override
  53. public void onCreate() {
  54. super.onCreate();
  55. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
  56. mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "app:My Tag");
  57. mWakeLock.acquire();
  58. }
  59.  
  60. @Override
  61. public int onStartCommand(Intent intent, int flags, int startId) {
  62. startSensors();
  63. return START_STICKY;
  64. }
  65.  
  66. @Override
  67. public IBinder onBind(Intent intent) {
  68. return null;
  69. }
  70.  
  71. // Start Sensors
  72. private void startSensors() {
  73. sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  74.  
  75. accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  76. gyroscopemeter = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
  77. magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
  78. barometer = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
  79.  
  80. sensorManager.registerListener(this, accelerometer, speed);
  81. sensorManager.registerListener(this, gyroscopemeter, speed);
  82. sensorManager.registerListener(this, magnetometer, speed);
  83. sensorManager.registerListener(this, barometer, speed);
  84. }
  85.  
  86. @Override
  87. public void onAccuracyChanged(Sensor sensor, int accuracy) {}
  88.  
  89. @Override
  90. public void onSensorChanged(SensorEvent event) {
  91. timestamp = event.timestamp / 1000000;
  92. new SensorEventLoggerTask().execute(event);
  93. }
  94.  
  95. private class SensorEventLoggerTask extends AsyncTask<SensorEvent, Void, Void> {
  96. @Override
  97. protected Void doInBackground(SensorEvent... events) {
  98. SensorEvent event = events[0];
  99. switch (event.sensor.getType()) {
  100. case Sensor.TYPE_ACCELEROMETER:
  101. accelerometerVector[0] = event.values[0];
  102. accelerometerVector[1] = event.values[1];
  103. accelerometerVector[2] = event.values[2];
  104. acceleroAccuracy = event.accuracy;
  105. acceleroCount++;
  106. break;
  107. case Sensor.TYPE_GYROSCOPE:
  108. gyroVector[0] = event.values[0];
  109. gyroVector[1] = event.values[1];
  110. gyroVector[2] = event.values[2];
  111. gyroAccuracy = event.accuracy;
  112. gyroCount++;
  113. break;
  114. case Sensor.TYPE_MAGNETIC_FIELD:
  115. magneticVector[0] = event.values[0];
  116. magneticVector[1] = event.values[1];
  117. magneticVector[2] = event.values[2];
  118. magnetoAccuracy = event.accuracy;
  119. magnetoCount++;
  120. break;
  121. case Sensor.TYPE_PRESSURE:
  122. pressure = event.values[0];
  123. pressureAccuracy = event.accuracy;
  124. break;
  125. default:
  126. return null;
  127. }
  128. if (acceleroCount * gyroCount * magnetoCount > 0) {
  129. MainActivity.getInstance().getLastLocation();
  130. printData();
  131. saveFile();
  132. acceleroCount = 0;
  133. gyroCount = 0;
  134. magnetoCount = 0;
  135. }
  136. return null;
  137. }
  138. }
  139.  
  140. // Save File
  141. private void saveFile() {
  142. String fileContents = timestamp + ";" + accelerometerVector[0] + ";" + accelerometerVector[1] + ";" + accelerometerVector[2] + ";" + acceleroAccuracy + ";" + gyroVector[0] + ";" + gyroVector[1] + ";" + gyroVector[2] + ";" + gyroAccuracy + ";" + magneticVector[0] + ";" + magneticVector[1] + ";" + magneticVector[2] + ";" + magnetoAccuracy + ";" + pressure + ";" + pressureAccuracy + ";" + MainActivity.behavior + ";" + latitude + ";" + longitude;
  143. String separator = System.getProperty("line.separator");
  144.  
  145. try {
  146. fileOutputStream = new FileOutputStream(MainActivity.myFile, true);
  147. fileOutputStream.write(fileContents.getBytes());
  148. fileOutputStream.write(separator.getBytes());
  149. fileOutputStream.close();
  150. } catch (Exception e) {
  151. e.printStackTrace();
  152. }
  153. }
  154.  
  155. @Override
  156. public void onDestroy() {
  157. super.onDestroy();
  158. sensorManager.unregisterListener(this);
  159. mWakeLock.release();
  160. }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement