Something went wrong on our end
-
Peter Joseph De Jonckheere CESM2014 authored
Solved braodcast issue and notification issue through manifest changes. Now sends notification however this is not yet fully functioning.
Peter Joseph De Jonckheere CESM2014 authoredSolved braodcast issue and notification issue through manifest changes. Now sends notification however this is not yet fully functioning.
Accelerometer.java 3.65 KiB
package com.example.stimulusStrategy;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import com.example.pharmacy.frontEnd.R;
import com.example.stimulus.SedentaryStimulus;
import java.util.Calendar;
/**
* Created by pharmacy on 09/01/2018.
*/
public class Accelerometer extends Service implements StimulusStrategy, SensorEventListener {
private SensorManager mSensorManager;
private Sensor accl;
private AlarmManager am;
//private Context context;
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Log.d("ACCEL", "CREATED ACCEL");
mSensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 60000000);
//Sampling period is still far too often here.
//Parameters to be set here such as delay etc.
//Does data streaming/listening need to be set up? If so here
am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
setUpClock();
return START_STICKY;
}
private void setUpClock() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
Intent i = new Intent(getBaseContext(), com.example.stimulus.SedentaryStimulus.class);
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), R.integer.alarm_rc, i, PendingIntent.FLAG_UPDATE_CURRENT);
//test
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+3000, pi);
//actual am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+AlarmManager.INTERVAL_HOUR, pi);
Log.d("myTag", "ALARM SET" + am.toString());
}
public void monitor() {
Log.d("ACCEL", "MONITORING");
Toast saved = Toast.makeText(this, R.string.motion,Toast.LENGTH_LONG);
saved.show();
Intent i = new Intent(getBaseContext(), com.example.stimulus.SedentaryStimulus.class);
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), R.integer.alarm_rc, i, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pi);
setUpClock();
}
@Override
public void onSensorChanged(SensorEvent event) {
float[] gravity = new float[3];
float[] linearAcc = new float[3];
int moved = 0;
final float alpha = (float) 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linearAcc[0] = event.values[0] - gravity[0];
linearAcc[1] = event.values[1] - gravity[1];
linearAcc[2] = event.values[2] - gravity[2];
Log.d("ACCEL", "SENSOR EVENT");
for(int i = 0; i < 3; i++){
if(linearAcc[i] > 5){
moved++;
}
}
if(moved >= 2) {
monitor();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}