Android getSystemService TypeCastException
我的应用程序类的onCreate方法中包含以下代码Android getSystemService TypeCastException,android,kotlin,service,Android,Kotlin,Service,我的应用程序类的onCreate方法中包含以下代码 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { getSystemService(Context.MIDI_SERVICE).also { MidiController.instance.midiManager = it as MidiManager } } 当我在我的设备上测试此代码时,我没有任何问题,但是一些用户设备报告以下错误 java.la
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getSystemService(Context.MIDI_SERVICE).also {
MidiController.instance.midiManager = it as MidiManager
}
}
当我在我的设备上测试此代码时,我没有任何问题,但是一些用户设备报告以下错误
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:4973)
at android.app.ActivityThread.-wrap1 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1560)
at android.os.Handler.dispatchMessage (Handler.java:111)
at android.os.Looper.loop (Looper.java:207)
at android.app.ActivityThread.main (ActivityThread.java:5765)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:679)
Caused by: kotlin.TypeCastException:
我怀疑问题可能是因为我从应用程序类而不是活动调用getSystemService,这是一种错误的做法吗?如果不是,问题是什么?谢谢我认为解决方案应该使用hasSystemFeature,而不是检查SDK版本
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) {
getSystemService(Context.MIDI_SERVICE).also {
MidiController.instance.midiManager = it as MidiManager
}
}
我认为解决方案应该是使用hasSystemFeature,而不是检查SDK版本
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) {
getSystemService(Context.MIDI_SERVICE).also {
MidiController.instance.midiManager = it as MidiManager
}
}
在您的应用程序中,您在哪里运行此代码?我在创建时在
内部运行它没有问题“这是一种糟糕的做法吗?”——这是完全正常的。除了您发布的内容之外,还有更多关于堆栈跟踪的内容吗?可能不是所有设备都具有midi功能,并且MidiManager系统服务返回null。尝试将null强制转换为kotlin非null类型可以解释stacktrace。是的,我想不是所有SDK超过23的设备都具有midi功能。我的错误是检查SDK版本,而不是使用HassystemFeature。在应用程序中,您正在运行此代码吗?我在创建时在内部运行它没有问题“这是一种糟糕的做法吗?”——这是完全正常的。除了您发布的内容之外,还有更多关于堆栈跟踪的内容吗?可能不是所有设备都具有midi功能,并且MidiManager系统服务返回null。尝试将null强制转换为kotlin非null类型可以解释stacktrace。是的,我想不是所有SDK超过23的设备都具有midi功能。我的错误是检查SDK版本而不是使用hasSystemFeature