2

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`

では、この問題を解決するにはどうすればよいでしょうか。

4

3 に答える 3

0

Android のドキュメントを確認するandroid.os.Build.VERSION_CODES.GINGERBREADと、API レベル 9 (Gingerbread) 以降でサポートされています。If 条件からそれを削除し、別の方法でチェックを行います。たとえば、SDK が DONUT より大きい場合は、別の方法でシリアルを取得することを確認します。

更新: たとえば、次のように試してください:

if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 9) {
             deviceID = android.os.Build.SERIAL;
} 
于 2012-09-10T11:43:02.807 に答える
0

SDK ではなく SDK_INT を使用してください。これは文字列ではなく整数であり、苦しんでいる比較の問題を解決します。

これは私のために働く:

if(Build.VERSION.SDK_INT >= 9){
        deviceID = android.os.Build.SERIAL;  
}
于 2013-10-11T13:43:31.260 に答える
0

Build.VERSION.SDK_INT代わりに使用し、次のInteger.parseInt(android.os.Build.VERSION.SDK)ような数字で確認しますBuild.VERSION.SDK_INT>9

于 2014-03-03T08:58:53.930 に答える