问题描述
我正在使用化石手表的磨损操作系统中进行跌倒检测,并在前景中进行跌倒检测,还使用了意图服务在后台进行跌倒检测,但是我的手表应用仅获得1.30分钟的后台服务。如何在磨损操作系统中获得连续的后台服务以进行跌倒检测? 目前我正在使用此链接进行后台服务
public class FallDetectService extends Intent Service implements SensorEventListener
{
public static final boolean SERVERTRACE = false;
protected static final String TAG = "BackgroundLocationService";
private SensorManager sensorManager;
private Sensor accelerometer;
private Button button;
final static long TIME = 15000;
private FallDetectAlgo fallDetectAlgo;
// private Handler h0;
private boolean flag_fall = false;
private boolean flag_buffer_ready = false;
private ImageView image;
private boolean f_send_msg = true;
SharedPreferences sharedPreferences;
String watch_id;
SensorEvent event;
// private Intent mIntentService;
private PendingIntent mPendingIntent;
IBinder mBinder = new FallDetectService.LocalBinder();
public FallDetectService(){
super("Fall Service");
}
public FallDetectService(String name) {
super(name);
}
@SuppressLint("LongLogTag")
@Override
public void onCreate() {
Log.i(TAG,"onCreate()");
if (SERVERTRACE) enableStrictMode(); // for socket handling in main loop
super.onCreate();
sharedPreferences = getApplicationContext().getSharedPreferences("USER",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isUserLogin",true);
editor.commit();
watch_id = sharedPreferences.getString("key_watch_id","");
// start sample and analyze
fallDetectAlgo = new FallDetectAlgo();
fallDetectAlgo.setDaemon(true);
fallDetectAlgo.start();
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener((SensorEventListener) this,accelerometer,SensorManager.SENSOR_DELAY_norMAL);
} else {
Toast.makeText(this,"No Accelerometer Found!!",Toast.LENGTH_LONG).show();
}
}
@Override
public int onStartCommand(@Nullable Intent intent,int flags,int startId) {
fallDetectAlgo = new FallDetectAlgo();
System.out.println("Service started");
fallDetectAlgo.setDaemon(true);
fallDetectAlgo.start();
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener((SensorEventListener) this,Toast.LENGTH_LONG).show();
}
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
flag_buffer_ready = fallDetectAlgo.get_buffer_ready();
if (flag_buffer_ready) {
} else {
}
// store values in buffer and visualize fall
System.out.println("FallEvent flag " + fallDetectAlgo.set_data(event));
flag_fall = fallDetectAlgo.set_data(event); // event has values minus gravity
if (flag_fall) {
if (f_send_msg) {
f_send_msg = false;
}
System.out.println("Fall Event Fall detected success");
} else {
f_send_msg = true;
fallEventOccured();
}
}
public class LocalBinder extends Binder {
public FallDetectService getServerInstance() {
return FallDetectService.this;
}
}
private void fallEventOccured() {
StringRequest stringRequest = new StringRequest(Request.Method.POST,FALL_EVENT,new Response.Listener<String>() {
@SuppressLint("LongLogTag")
@Override
public void onResponse(String response) {
Log.e("fallEventOccured response","" + response);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("save_heart_rate error","" + error);
Toast.makeText(getApplicationContext(),"Please try latter",Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String,String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
params.put("watch_id","" + watch_id);
return params;
}
};
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
0,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}
@Override
public void onSensorChanged(SensorEvent event) {
// display if buffer is ready
flag_buffer_ready = fallDetectAlgo.get_buffer_ready();
if (flag_buffer_ready) {
} else {
}
// store values in buffer and visualize fall
System.out.println("FallEvent flag " + fallDetectAlgo.set_data(event));
flag_fall = fallDetectAlgo.set_data(event); // event has values minus gravity
if (flag_fall) {
if (f_send_msg) {
f_send_msg = false;
}
System.out.println("Fall Event Fall detected success");
fallEventOccured();
} else {
f_send_msg = true;
}
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy) {
}
public void enableStrictMode() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
@SuppressLint("LongLogTag")
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG,"Service Stoped");
}
}
https://github.com/alessandror/AndroidFallDetectionApp
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)