android - 在模拟器中使用反射创建 SensorEvent 对象不起作用
问题描述
我想创建一个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
当应用程序在模拟器中运行时,我有什么方法可以创建对象?
解决方案
构造函数仍被标记为包私有。这可以通过将其设置为可访问来规避:
private fun getSensorEventObject(size : Int) : SensorEvent?{
return SensorEvent::class.constructors.firstOrNull()?.let{
it.isAccessible = true
it.call(size)
}
}
推荐阅读
- xml - PowerShell XML 架构加载
- sql - 使用具有最大并发性的 postgres 事务以原子方式比较和更新多行
- python - 使用 PRAW 监控列表中的多个关键字字符串
- python - 范围在 matplotlib 中的真正作用是什么?
- jquery - 如何防止按钮在单击后禁用
- priority-web-sdk - 如何使用登录返回的对象'LoginFunctions'
- php - 如何使用中间件将授权访问令牌发送到 Laravel 中的请求标头
- python - py请求会话持久性到redis
- mysql - MySQl 使用 COUNT 和 CASE 语句
- statistics - 用于检查分类时间序列的平稳/非平稳的统计测试