簡體   English   中英

Android特定部分中的Kotlin /本機訪問設備傳感器

[英]Kotlin/Native access device sensor in Android specific part

我目前堅持一項我認為很基本​​的任務。 我正在用Kotlin / Native開發一個庫,該庫應該查詢iOS和Android中的重力傳感器。

幾乎所有邏輯都在公共部分中,而與設備傳感器的通信僅在特定於平台的方法中實現。 令人驚訝的是,所有的iOS核心庫(在本例中為CoreMotion)都已移植,因此實現起來非常容易。

在這種情況下,CoreMotion允許我在重力傳感器上添加偵聽器,該偵聽器在屏幕的方向相對於X,Y或Z改變時會調用回調(我對Z btw感興趣)

在Android中,我會做這樣的事情

private lateinit var sensorManager: SensorManager

fun setupSensor() {

    this.sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)?.let {
        this.accelerometer = it
    }
    sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY)?.let {
        this.gravity = it
    } 

}

但是所需的進口商品在Kotlin / Native中不可用

import android.hardware.Sensor;
import android.hardware.SensorManager;

有沒有辦法在Kotlin / Native中訪問這種硬件(重力傳感器)? 還是在Kotlin / Native的Android特定部分更好?

如果您確實希望將其作為Android上的Kotlin / Native庫使用-它可以直接訪問Android NDK,而不是SDK。

因此,對於傳感器,它可以使用https://android.googlesource.com/platform/frameworks/native/+/jb-dev/include/android/sensor.h中的函數

在Kotlin / Native中,這些功能在platform.android.*包中可用platform.android.*

但是,如果您只想使您的庫在iOS和Android中都可用-使用“ kotlin-multiplatform” gradle插件,由Kotlin / Native到iOS以及由普通Kotlin到Android編譯相同的資源是一種更為簡單和通用的方式。

我想那會是這樣;

 val sensorManager: SensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

            sensorManager.registerListener(object : SensorEventListener {
                override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
                    //Not needed
                }

                override fun onSensorChanged(event: SensorEvent?) {
                    if (event?.sensor?.type == Sensor.TYPE_GRAVITY) {
                        System.out.println("X: " + event.values[0])
                        System.out.println("Y: " + event.values[1])
                        System.out.println("Z: " + event.values[2])
                    }
                }
            }, sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), Sensor.TYPE_GRAVITY)

暫無
暫無

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

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