以下是我用来访问Build.SERIAL
静态字段的一些代码,但在Android 1.6上运行时会崩溃!
// introduced in Android 2.3(API Level 9)
if (Integer.parseInt(android.os.Build.VERSION.SDK) >= android.os.Build.VERSION_CODES.GINGERBREAD) {
deviceID = android.os.Build.SERIAL; //cannot execute here if runs on Android 1.6!!!
}
这是崩溃日志:
DexOpt: couldn't find static field
W/dalvikvm( 1098): VFY: unable to resolve static field 37 (SERIAL) in Landroid/os/Build;
W/dalvikvm( 1098): VFY: rejecting opcode 0x62 at 0x0001
W/dalvikvm( 1098): VFY: rejected Lcom/opera/mini/android/DisplayNotificationService;.getDeviceSerialID ()Ljava/lang/String;
W/dalvikvm( 1098): Verifier rejected class Lcom/opera/mini/android/DisplayNotificationService;
W/dalvikvm( 1098): Class init failed in newInstance call (Lcom/opera/mini/android/DisplayNotificationService;)
D/AndroidRuntime( 1098): Shutting down VM
W/dalvikvm( 1098): threadid=3: thread exiting with uncaught exception (group=0x4001da10)
E/AndroidRuntime( 1098): Uncaught handler: thread main exiting due to uncaught exception`
那么如何解决这个问题?
答案 0 :(得分:0)
如果您检查Android documentation,则自API级别9(Gingerbread)以来支持android.os.Build.VERSION_CODES.GINGERBREAD
。从If条件中删除它并以另一种方式检查。对于例如检查SDK是否大于DONUT,然后执行其他操作获取序列。
<强>更新强> 我的意思是尝试这样的例如:
if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 9) {
deviceID = android.os.Build.SERIAL;
}
答案 1 :(得分:0)
使用SDK_INT而不是SDK,因为它是一个整数而不是字符串,并删除了您遇到的比较问题。
这对我有用:
if(Build.VERSION.SDK_INT >= 9){
deviceID = android.os.Build.SERIAL;
}
答案 2 :(得分:0)
使用Build.VERSION.SDK_INT
代替Integer.parseInt(android.os.Build.VERSION.SDK)
,然后按照Build.VERSION.SDK_INT>9