wear-os - 如何在磨损操作系统的背景中获得加速度计传感器的响应?
问题描述
我在有化石手表的磨损操作系统中进行跌倒检测,并在前台进行跌倒检测,还使用意图服务在后台进行跌倒检测,但我的手表应用程序仅获得 1.30 分钟的后台服务。如何在wear-os 中获得持续的跌倒检测后台服务?目前我正在使用此链接进行后台服务
下面的代码用于后台服务并在主要活动中调用意图服务
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, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
} else {
Toast.makeText(this, "No Accelerometer Found!!",
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");
}
}
解决方案
推荐阅读
- python - 在 StellarGraph 中使用 Hinsage/Graphsage 的链接预测返回 NaN
- python - python检查字符串上的字谜
- python - Python读取文件添加额外字符
- excel - 有一个宏正在运行,改变了电脑,现在它不再运行了,给我一个错误
- arrays - 如何自动将文本从一组单元格复制到 Google 表格中的另一个单元格
- json - 使用 Bokeh 为交互式地理可视化准备地理数据 - 对 JSON 很慢
- yarnpkg - 纱线运行 someScript 输出“找不到命令:导出”
- jenkins - 我可以根据触发它的用户停止 Jenkins 作业吗?
- r - 使用 hms() 将 .csv 中的 HH:MM:SS 字符串转换为 R 中的 HH:MM:SS 向量
- html - DevExtreme DropDownBox 显示表达式在 UI (Angular) 上呈现 [object Object]