2015-05-22 11 views
11

Đó là một vấn đề nổi tiếng mà nhiều điện thoại Android tắt máy gia tốc khi screen goes off. Tuy nhiên một cái gì đó dường như đã thay đổi với Android Fit (ứng dụng). Fit giữ các bước đếm ngay cả khi màn hình tắt. Nếu Fit được cài đặt, sau đó sự kiện được nêu ra cho bước đếm trong môi trường Fit và tôi có thể nắm bắt chúng bằng cách sửBộ đếm bước trong Android: luôn bật?

Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
       .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 

Tôi đã thử nghiệm này trên Samsung S4 và trên OnePlus One và trong cả hai trường hợp các bước được tính. Làm cách nào để thực hiện điều đó? Họ sử dụng lớp học Android nào? Sự hiểu biết của tôi là phương pháp sẵn có được giới thiệu kể từ Kitkat là triển khai SensorEventListener. Ví dụ, tính tự chủ cung cấp mã số implements this. Tuy nhiên trên nhiều điện thoại, bước đếm dừng lại khi màn hình tắt. Điều thú vị là việc đếm dường như không dừng lại nếu ứng dụng Google Fit được cài đặt (do đó tôi đoán là họ vẫn tiếp tục gia tốc kế).

Tôi có thiếu gì đó không? Chức năng giữ các bước đếm sau khi tắt màn hình có sẵn cho các lập trình viên không? Cảm ơn!

Trả lời

7

Như Ilja đã nói, mã của bạn chạy ngay cả sau khi màn hình bị tắt. Nhưng trong trường hợp này, tôi đoán chúng ta cần một câu trả lời khác.

Họ chắc chắn sử dụng Dịch vụ giữ wakelock và họ truy vấn các cảm biến cho dữ liệu. Phần quan trọng ở đây là giữ wakelock - bạn phải ngăn thiết bị chuyển sang chế độ ngủ trong suốt thời gian tồn tại của dịch vụ - nếu bạn không muốn bỏ lỡ một số dữ liệu.

Nhưng cách tiếp cận này sẽ tiêu hao pin rất nhanh, vì để phát hiện các bước bạn cần xử lý khá nhiều dữ liệu từ cảm biến.

Đó là lý do tại sao có sensor batching. Điều đó cho phép bạn nhận dữ liệu cảm biến liên tục ngay cả khi không giữ thiết bị tỉnh táo. Về cơ bản nó lưu trữ các sự kiện cảm biến trong hàng đợi dựa trên hw ngay trong chip và chỉ gửi chúng đến ứng dụng của bạn (dịch vụ, ..) tại các khoảng thời gian được xác định trước theo lô. Điều này cho phép bạn thực hiện giám sát 24/7 mà không làm hao pin đáng kể. Xin lưu ý rằng chỉ những chipset được hỗ trợ mới có thể thực hiện điều đó (bạn có thể tìm thấy chi tiết trong tài liệu Android), trong trường hợp điện thoại cũ hơn, bạn cần phải dự phòng phương thức lưu giữ wakelock để lưu dữ liệu của bạn.

Bạn cũng có thể chỉ sử dụng Google Fit APIs, nhưng điều này sẽ chỉ hoạt động khi có cả Google Fit + Google Play Services được cài đặt trên thiết bị có chức năng giám sát được bật.

+0

Cảm ơn @simekadam. Những gì bạn nói là chính xác. Tuy nhiên những gì tôi không hiểu là làm thế nào họ làm điều đó. Cách duy nhất tôi có thể thấy để giữ cho bước truy cập trên trên nhiều điện thoại là để có được một khóa đầy đủ, mà không thực sự là năng lượng hiệu quả. Các wakelocks một phần như WakefulBroadcastReceiver dường như bị bỏ qua bởi hầu hết gia tốc kế. Đây là lý do tại sao tôi tự hỏi làm thế nào họ làm điều đó một cách hiệu quả. – FabioC

+0

@FabioCiravegna bạn có thể vui lòng đăng thêm mã cho câu hỏi của bạn không? Điều đó có thể giúp tôi giải quyết vấn đề của bạn ..Bạn đang bắt đầu công cụ bước chân của mình từ WakefulBroadcastReceiver?Bạn có bắt đầu dịch vụ ghi âm của mình với startWakefulService không? Bạn có thu được một wakelock riêng cho dịch vụ của bạn không? (WakeFullBroadcastReceiver phát hành wakelock của nó sau 60 giây) – simekadam

+0

cảm ơn rất nhiều vì đã đề nghị giúp đỡ. Tôi đã tạo một ví dụ đơn giản về [link] (https://github.com/fabcira/step_counter_with_wakeLock) Github. Nó thậm chí còn đơn giản hơn cái tôi đề cập trước đây. Hoạt động chính đăng ký cảm biến và thiết lập một phần wakelock. Sau đó, tôi bắt đầu hoạt động. Step_counter hoạt động. Khi tôi tắt điện thoại, nó dừng lại. Tuy nhiên tôi đã tạo ra một dịch vụ kiểm tra xem wakeLock có bật không. Nó là. Nhưng bộ đếm bước tắt. Việc thiết lập cũng kiểm tra xem điện thoại có bộ đếm bước phần cứng hay không. Tôi có nó. Tôi bối rối. Bất kỳ trợ giúp đều được chào đón. Cảm ơn! – FabioC

0

Mỗi bình thường Chủ đề là tiếp tục làm việc khi màn hình tắt đi hoặc khi Hoạt động mất tập trung của nó ... nhưng khi hoạt động bị giết sau đó tất cả các chủ đề bị giết ...

Tuy nhiên bạn có thể sử dụng dịch vụ cho các tác vụ kéo dài như yêu cầu gia tốc kế ví dụ:

+0

Cảm ơn câu trả lời của bạn. Tôi sử dụng các dịch vụ nền để khi ứng dụng mất tiêu điểm, chúng vẫn đang hoạt động. Tôi sử dụng cả bộ đếm bước và nhận dạng hoạt động trong quá trình đó. Việc nhận dạng hoạt động tiếp tục diễn ra. Bộ đếm bước bị giết. – FabioC

Các vấn đề liên quan