Advertisement
Sean87

Android sensor listener on separate thread

Apr 22nd, 2014
3,040
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.40 KB | None | 0 0
  1. import android.content.Context;
  2. import android.hardware.Sensor;
  3. import android.hardware.SensorEvent;
  4. import android.hardware.SensorEventListener;
  5. import android.hardware.SensorManager;
  6. import android.os.Environment;
  7. import android.os.Handler;
  8. import android.os.HandlerThread;
  9. import android.util.Log;
  10.  
  11. import com.embedonix.mobilehealth.helpers.AppConstants;
  12.  
  13. import java.io.File;
  14. import java.io.FileNotFoundException;
  15. import java.io.FileOutputStream;
  16. import java.io.IOException;
  17.  
  18. /**
  19.  * Created by Saeid on 22-4-2014.
  20.  */
  21. final class LogRunnable implements Runnable {
  22.  
  23.     private Context mContext;
  24.     private SensorManager mSensorManager = null;
  25.     private Sensor mSensor;
  26.     private File mLogFile = null;
  27.     private FileOutputStream mFileStream = null;
  28.     private SensorEventListener mListener;
  29.     private HandlerThread mHandlerThread;
  30.  
  31.     LogRunnable(Context context) {
  32.         mContext = context;
  33.  
  34.     }
  35.  
  36.     /**
  37.      * Sets up folder and file to log the file on it
  38.      */
  39.     private void setupFolderAndFile() {
  40.  
  41.         File folder = new File(Environment.getExternalStorageDirectory()
  42.                 + File.separator + AppConstants.APP_LOG_FOLDER_NAME);
  43.  
  44.         if (!folder.exists()) {
  45.             folder.mkdirs();
  46.         }
  47.  
  48.         mLogFile = new File(Environment.getExternalStorageDirectory().toString()
  49.                 + File.separator + AppConstants.APP_LOG_FOLDER_NAME
  50.                 + File.separator + "test.txt");
  51.  
  52.         if (!mLogFile.exists()) {
  53.             try {
  54.                 mLogFile.createNewFile();
  55.             } catch (IOException e) {
  56.                 e.printStackTrace();
  57.             }
  58.         }
  59.  
  60.         if (mFileStream == null) {
  61.             try {
  62.                 mFileStream = new FileOutputStream(mLogFile, true);
  63.             } catch (FileNotFoundException e) {
  64.                 e.printStackTrace();
  65.             }
  66.         }
  67.     }
  68.  
  69.     @Override
  70.     public void run() {
  71.  
  72.         setupFolderAndFile();
  73.  
  74.         mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
  75.         mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  76.         mHandlerThread = new HandlerThread("AccelerometerLogListener");
  77.         mHandlerThread.start();
  78.         Handler handler = new Handler(mHandlerThread.getLooper());
  79.  
  80.  
  81.         mListener = new SensorEventListener() {
  82.             @Override
  83.             public void onSensorChanged(SensorEvent sensorEvent) {
  84.  
  85.  
  86.                     String formatted = String.valueOf(System.currentTimeMillis())
  87.                                             + "\t" + String.valueOf(sensorEvent.timestamp)
  88.                                             + "\t" + String.valueOf(sensorEvent.values[0])
  89.                                             + "\t" + String.valueOf(sensorEvent.values[1])
  90.                                             + "\t" + String.valueOf(sensorEvent.values[2])
  91.                                             + "\r\n";
  92.  
  93.                     //if (mIsServiceStarted && mFileStream != null && mLogFile.exists()) {
  94.                     if (mFileStream != null && mLogFile.exists()) {
  95.                         try {
  96.                             mFileStream.write(formatted.getBytes());
  97.                             long shit = Thread.currentThread().getId();
  98.  
  99.                             long ass = shit;
  100.                         } catch (IOException e) {
  101.                             e.printStackTrace();
  102.                         }
  103.                     }
  104.  
  105.             }
  106.  
  107.             @Override
  108.             public void onAccuracyChanged(Sensor sensor, int accuracy) {
  109.  
  110.             }
  111.         };
  112.  
  113.         mSensorManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_FASTEST,
  114.                 handler
  115.         );
  116.     }
  117.  
  118.  
  119.     public void cleanThread(){
  120.  
  121.         //Unregister the listener
  122.         if(mSensorManager != null) {
  123.             mSensorManager.unregisterListener(mListener);
  124.         }
  125.  
  126.         if(mHandlerThread.isAlive())
  127.             mHandlerThread.quitSafely();
  128.  
  129.  
  130.  
  131.         //Flush and close file stream
  132.         if (mFileStream != null) {
  133.             try {
  134.                 mFileStream.flush();
  135.             } catch (IOException e) {
  136.                 e.printStackTrace();
  137.             }
  138.             try {
  139.                 mFileStream.close();
  140.             } catch (IOException e) {
  141.                 e.printStackTrace();
  142.             }
  143.         }
  144.  
  145.  
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement