[英]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.