2011-02-08 71 views
6

Trong ứng dụng của tôi, tôi muốn đo lượng thời gian mà gia tốc kế đang nghỉ.Android - Cách đếm thời gian trong một thời gian dài

Ví dụ: nếu tôi đặt ngưỡng 0,4 m/s và tốc độ gia tốc luôn dưới mức này có nghĩa là điện thoại ở trạng thái nghỉ (ngưỡng có tính đến giá trị jitter).

Tôi muốn có thể đếm lượng thời gian mà điện thoại đang nghỉ và sau khi đạt đến một khoảng thời gian nghỉ ngơi nhất định, sau đó phản ứng lại sự kiện đó.

Tôi đã có gia tốc làm việc tốt, tôi chỉ cần đếm thời gian này và tôi không quen với cách làm điều này, bất cứ ai có thể giúp tôi ra khỏi đây? Cảm ơn trước

Giải pháp:

start = System.currentTimeMillis(); 

    if (vectorTotal > 10.1 || vectorTotal < 9.5){ 
     timelimit = (System.currentTimeMillis()+ 10000); 
    } 
    else if (start >= timelimit){ 
     checkUser(); 
     timelimit = (System.currentTimeMillis()+ 10000); 
    } 

Trả lời

6

là ứng dụng của bạn tại foreground?

Tại bắt đầu:

long start = System.currentTimeMillis(); 

Lưu giá trị này trong cơ sở dữ liệu hoặc trong tùy chọn nếu cần thiết.

Cuối cùng:

long end = System.currentTimeMillis(); 

Sau đó:

long passedTime = end - start; 
+0

Sau khi có một số vấn đề niggly với lớp báo động, tôi đã thử nó theo cách này và nó đã được đơn giản hơn nhiều mà không có vấn đề, cổ vũ bạn đời! – bobby123

0

Tôi nghĩ rằng bạn có thể nhìn vào một giải pháp Dịch vụ kép/Hoạt động nơi Dịch vụ chạy ở chế độ nền đếm bất cứ điều gì bạn muốn đếm và cung cấp thông tin này cho Hoạt động khi nó yêu cầu.

Theo thời gian đếm liên quan, điều đó đơn giản là thao tác trả lại từ System.currentTimeMillis() như DKIT Android chỉ ra.

1

Bạn có thể đặt báo thức mỗi khi bạn ở trên ngưỡng và khi báo thức cuối cùng kích hoạt bạn làm bất cứ điều gì bạn muốn.

Do something như thế này khi bạn bắt đầu hoạt động của bạn:

am = (AlarmManager) getSystemService(ALARM_SERVICE); 
timeoutInMillis = 60000; 
Intent timeoutIntent = <create the intent you want to run here>; 
timeoutPendingIntent = PendingIntent.getService(this, 0, timeoutIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

và sau đó mọi gia tốc là ở trên ngưỡng của bạn:

am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeoutInMillis, timeoutPendingIntent); 

đừng quên để xóa cảnh báo khi bạn thoát khỏi bạn hoạt động:

am.cancel(timeoutPendingIntent); 
+0

Cảm ơn câu trả lời getekha, rất hữu ích, tôi chỉ gặp một vài vấn đề với trình quản lý báo động khi tôi không cần nó nữa và không đăng ký người nghe, 1 báo thức luôn được đặt ngay cả khi sử dụng am.cancel trên cùng pendingIntent đã sử dụng phương pháp của DKITandroid. Upvote cho các ví dụ mã! – bobby123

0

Bạn có thể sử dụng

Trong dịch vụ bạn nghe sự kiện từ gia tốc, trên mỗi sự kiện bạn hủy báo thức trước đó và đặt mới. Khi đạt đến một khoảng thời gian nhất định - bạn sẽ có ý định báo động.

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