【问题标题】:Create SensorEvent object using reflecion in Emulator not working在模拟器中使用反射创建 SensorEvent 对象不起作用
【发布时间】:2020-06-30 13:21:59
【问题描述】:

我想创建一个SensorEvent 对象来模拟传感器数据。所以我用这个反射代码来创建SensorEvent

private fun getSensorEventObject(size : Int) : SensorEvent?{
    val cons = SensorEvent::class.constructors.toList()
    if (cons.isNotEmpty()) {
        return cons[0].call(size)
    }
    return null
}

这在真实设备上运行良好。但是当我在模拟器中运行这段代码时,这不起作用。我遇到了这个异常

kotlin.reflect.full.IllegalCallableAccessException: java.lang.IllegalAccessException: Class java.lang.Class<kotlin.reflect.jvm.internal.calls.CallerImpl$Constructor> cannot access  method void android.hardware.SensorEvent.<init>(int) of class java.lang.Class<android.hardware.SensorEvent>

不确定,因为模拟器没有真正的硬件,这就是我遇到异常的原因。

当应用程序在模拟器中运行时,我有什么方法可以创建 SensorEvent 对象?

【问题讨论】:

    标签: android reflection android-emulator android-sensors


    【解决方案1】:

    构造函数仍被标记为包私有。 这可以通过将其设置为可访问来规避:

    private fun getSensorEventObject(size : Int) : SensorEvent?{
        return SensorEvent::class.constructors.firstOrNull()?.let{
            it.isAccessible = true
            it.call(size)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      相关资源
      最近更新 更多