日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了安卓加速度計每次返回相同的值的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試記錄加速度計的每秒4個采樣值。因此,我每250毫秒重復一次我的邏輯(我也嘗試了每秒4個采樣)。
每次我的方法結束時,我注銷傳感器并在我的方法開始時重新注冊(當我沒有注銷傳感器時,我的邏輯在onSensorChanged中不起作用,并且它持續記錄所有數據)。

通過這種方法(每秒或每四分之一秒注冊和注銷傳感器),我能夠管理加速度計的采樣率,但每次都返回相同的值。

這是我的onSensorChanged方法。

   @Override
    public void onSensorChanged(final SensorEvent event) {

        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                            sensorManager.registerListener(JumpingBall.this, accelerometer, sensorManager.SENSOR_DELAY_NORMAL);

                float deltaX1 = (float) ((event.values[0])/9.81);
                float deltaY1 = (float) ((event.values[1])/9.81);
                float deltaZ1 = (float) ((event.values[2])/9.81);

                int i=0;
                for (i=0;i<1;i++) {

                    listx.add(String.valueOf(deltaX1));
                    listy.add(String.valueOf(deltaY1));
                    listz.add(String.valueOf(deltaZ1));
                }
                sensorManager.unregisterListener(JumpingBall.this);

   }


        }, 0, 250);//put here time 1000 milliseconds=1 second
    }

如果需要任何其他信息,請通知我。

推薦答案

不要每次都取消注冊和注冊監聽器。嘗試在onCreate或onStart方法中注冊偵聽器,并在onFinish上注銷偵聽器。

我非常確定您的錯誤來自于這樣一個事實,即每次檢測到變化時,您似乎都會”重置”您的加速度計。

換句話說,刪除您的呼叫

sensorManager.registerListener(JumpingBall.this, accelerometer, sensorManager.SENSOR_DELAY_NORMAL);

sensorManager.unregisterListener(JumpingBall.this);

當您開始上下文時,將onSensorChanged方法中的sensorManager.registerListener放入Main/中,并在完成上下文后將sensorManager.unregisterListener放入onFinded/中。

https://developer.android.com/guide/topics/sensors/sensors_motion.html

這里還提供了一些如何設置某些傳感器(包括加速計)的示例的鏈接。您可以在頂部看到它們如何初始化傳感器,然后使用onSensorChanged記錄數據。

編輯:

以下是我會做的事情。使您的onSensorChanged仍然在每次加速度計檢測到什么東西時記錄事件,這就是您想要做的。確保在您的onCreate.中注冊監聽程序這非常重要。然后,當你的計時器滴答作響時,確保你記錄了這些值。通過將onSensorChangedtimer.scheduleAtFixedRate方法設置為包私有(即確保在類的頂部對其進行初始化),確保變量可用于onSensorChangedtimer.scheduleAtFixedRate方法。您也不需要只運行一次的for循環,那么它就不是一個循環。

因此,我們的想法是始終讀取值,但僅每隔250ms記錄它們一次。正如另一位用戶所指出的,每次發生新事件時,您都會創建一個新的計時器,這不是您想要做的。嘗試實現以下代碼:

//Initialize these up top
private float deltaX1 = 0;
private float deltaY1 = 0;
private float deltaZ1 = 0; 

@Override
public void onSensorChanged(final SensorEvent event) {

            deltaX1 = (float) ((event.values[0])/9.81);
            deltaY1 = (float) ((event.values[1])/9.81);
            deltaZ1 = (float) ((event.values[2])/9.81);

}


timer.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {

        listx.add(String.valueOf(deltaX1));
        listy.add(String.valueOf(deltaY1));
        listz.add(String.valueOf(deltaZ1));

    }, 0, 250);//put here time 1000 milliseconds=1 second
}

您可能必須將計時器代碼添加到onCreateonStart方法中,我不確定您的項目是什么樣子,但在合適的地方實現它。

這篇關于安卓加速度計每次返回相同的值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:加速度計 每次 返回
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定