簡體   English   中英

在Android上注冊多個傳感器偵聽器時出現問題

[英]Problem registering multiple sensor listeners on Android

我試圖在一個傳感器管理器中注冊多個傳感器偵聽器,但是此代碼不起作用:

boolean linearAccelerationRegistered = mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
        boolean rotationVecRegistered = mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_FASTEST);

它僅注冊加速度計。 當我注釋掉第一條陳述時,它記錄了輪換

從技術上講,您只向傳感器管理器注冊一個偵聽器,但是此偵聽器偵聽多個傳感器。 我的第一個想法是,必須為每個傳感器使用不同的偵聽器類。 我手邊有一個示例活動,其中使用了四個傳感器。 我在傳感器管理器中為每個人注冊了一個不同的偵聽器。 那行得通。 現在,我與所有一個聽眾一起嘗試了您的方法,並且效果很好。

僅憑這兩行很難說出什么地方出了問題。 也許您認為方向傳感器未注冊,因為在方向更改排隊之前,監聽器已連續收到來自加速度計的多個值更改!

如果您有一個用於多個傳感器的偵聽器實例,則應檢查SensorEvent以確定哪些傳感器報告了更改:

public void onSensorChanged(SensorEvent event) {
    Sensor source = event.sensor;
    if (source.equals(mAccelerometer)) {
       // do your stuff
    } else if (source.equals(mOrientation)) {
       // do your stuff
    }
}

嘗試向每個傳感器注冊自己的偵聽器,看看結果是否有所不同(但它也應該按照您指出的方式工作...):

mSensorManager.registerListener(mAccelerometerListener, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(mOrientationListener, mOrientation, SensorManager.SENSOR_DELAY_FASTEST);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM