2016-04-03 14 views
12

Tôi đang phát triển một ứng dụng cho Android Wear. Nó lắng nghe tọa độ từ một cảm biến gia tốc và tìm thấy một mô hình.Cảm biến gia tốc gây ra tổn thất khi chạy vào dịch vụ

Để thực hiện việc này, khi người dùng nhấp vào nút, dịch vụ sẽ bắt đầu và bắt đầu lưu trữ tọa độ trong Danh sách. Thông thường, cảm biến gia tốc ghi lại 4 đến 5 tọa độ mỗi giây.

Vấn đề đôi khi phương thức onSensorChanged() không nhận dữ liệu trong vài giây làm mất dữ liệu và khó tìm mẫu.

Dưới đây là một ý chính của dịch vụ của tôi: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07

Những điều tôi đã cố gắng:

  • Tôi đang sử dụng android: stopWithTask = false để ngăn chặn các dịch vụ để dừng lại khi hoạt động chết.
  • Tôi cũng đã sử dụng WakeLock để ngăn thiết bị chuyển sang chế độ ngủ trong khi các dịch vụ đang ghi tọa độ.

Tôi đang làm gì sai? Có cách nào khác để nhận cuộc gọi lại từ cảm biến gia tốc mà không gây mất dữ liệu không?

Xin cảm ơn trước.

+0

Bạn đã thử sử dụng hằng số 'SensorManager.SENSOR_DELAY_ *' khác? Bất kỳ ảnh hưởng nào đến vấn đề này? – String

Trả lời

0

Hơi muộn, nhưng cuối cùng tôi tìm thấy giải pháp.

Tôi bắt đầu dịch vụ ở nền trước, với phương pháp startForeground(int, Notification) để dịch vụ không bao giờ dừng lại. Với bản sửa lỗi này, bạn sẽ không bao giờ mất bất kỳ SensorEvent nào.

0

Điều bạn có thể làm là ghi dữ liệu vào một tệp trên thiết bị và đọc nó từ tệp.

// When sensor value has changed 
@Override 
public void onSensorChanged(SensorEvent event){ 
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 

    //Perform a background task to store the data 
    new SensorEventLoggerTask().execute(event); 

    // And continue to do whatever you want and grab the data 
    // The data will be saved in to a file on the device and read it from themre 
    } 
} 
Các vấn đề liên quan