JAVA:
摘自http://stackoverflow.com/questions/3423754/retrieving-android-api-version-programmatically
从1.6开始,
int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= android.os.Build.VERSION_CODES.FROYO){ // Do something for froyo and above versions } else{ // do something for phones running an SDK before froyo }
相关代号宏:
http://developer.android.com/reference/android/os/Build.VERSION.html#SDK_INT
http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
JNI C/C++:
摘自:http://stackoverflow.com/questions/10196361/how-to-check-the-device-running-api-level-using-c-code-via-ndk
1 // Based on article here: 2 // http://android-developers.blogspot.co.uk/2011/09/androids-http-clients.html 3 // Which references the issue documented here: 4 // http://code.google.com/p/android/issues/detail?id=2939 5 // We need to set "http.keepAlive" to "false" if running an OS version earlier than Froyo (API Level 8) 6 7 if ((*env)->ExceptionCheck(env)) 8 return false; // already got an exception pending 9 10 bool success = true; 11 12 // VERSION is a nested class within android.os.Build (hence "$" rather than "/") 13 jclass versionClass = (*env)->FindClass(env, "android/os/Build$VERSION"); 14 if (NULL == versionClass) 15 success = false; 16 17 jfieldID sdkIntFieldID = NULL; 18 if (success) 19 success = (NULL != (sdkIntFieldID = (*env)->GetStaticFieldID(env, versionClass, "SDK_INT", "I"))); 20 21 jint sdkInt = 0; 22 if (success) 23 { 24 sdkInt = (*env)->GetStaticIntField(env, versionClass, sdkIntFieldID); 25 __android_log_print(ANDROID_LOG_VERBOSE, TAG, "sdkInt = %d", sdkInt); 26 } 27 28 if (success && sdkInt < 8) 29 { 30 jclass systemClass = (*env)->FindClass(env, "java/lang/System"); 31 if (NULL == systemClass) 32 success = false; 33 34 jmethodID setPropertyMethodID = NULL; 35 if (success) 36 success = (NULL != (setPropertyMethodID = (*env)->GetStaticMethodID(env, systemClass, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"))); 37 38 jstring propString = NULL; 39 if (success) 40 success = (NULL != (propString = (*env)->NewStringUTF(env, "http.keepAlive"))); 41 42 jstring valueString = NULL; 43 if (success) 44 success = (NULL != (valueString = (*env)->NewStringUTF(env, "false"))); 45 46 jobject oldValueString = NULL; 47 if (success) 48 { 49 __android_log_print(ANDROID_LOG_VERBOSE, TAG, "Disabling http.keepAlive"); 50 oldValueString = (*env)->CallStaticObjectMethod(env, systemClass, setPropertyMethodID, propString, valueString); 51 } 52 53 // cleanup 54 (*env)->DeleteLocalRef(env, propString); 55 (*env)->DeleteLocalRef(env, valueString); 56 (*env)->DeleteLocalRef(env, oldValueString); 57 (*env)->DeleteLocalRef(env, systemClass); 58 } 59 60 // cleanup 61 (*env)->DeleteLocalRef(env, versionClass); 62 63 return success;