Вы, сэр, есть два пути для этого, как вы должны использовать JNI:
Вариант А. Создать класс под названием «DeviceInfo», прикрепить статический метод.
boolean isGlassDevice() {
return android.os.Build.MODEL.contains("Glass");
}
и от вашего C/функция C++:
jclass jc_your_class = (*env)->FindClass(env, "com.your.util.DeviceInfo"); // YOUR DeviceInfo class
jmethodID jmid_is_glass_device = (*env)->GetMethodID(env, jc_your_class, "isGlassDevice", "()Z"); // Get info method.
jboolean jb_is_glass_device = (*env)->CallStaticBooleanMethod(env, jc_your_class, jmid_is_glass_device);
if (jb_is_glass_device == JNI_TRUE){
// Your code goes here...
}
Вариант B. Использование JNI, чтобы сделать всю грязную материал:
jclass jc_build = (*env)->FindClass(env, "android/os/Build"); // Build class
jfieldID jfid_kMODEL = (*env)->GetStaticFieldID(env, jc_build, "MODEL", "Ljava/lang/String;"); // MODEL attr.
jstring js_model_value = (*env)->GetStaticObjectField(env, obj, jfid_kMODEL); // MODEL attr. value.
jstring js_glass_value = (*env)->NewStringUTF(env, "Glass"); // Glass string value.
const char * nat_model_value = (*env)->GetStringUTFChars(env, js_model_value, NULL) ;
const char * nat_glass_value = (*env)->GetStringUTFChars(env, js_glass_value, NULL) ;
if (strcmp(nat_model_value, nat_glass_value) == 0){
// Both strings are equal
}
Я prefeer первый метод, так как он меньше, чем вариант B. Наконец, помните, что JNI-вызовы между JVM и вашим C/C++-кодом довольно медленны по сравнению с Java-to-Java и C-to-C, поэтому вам нужно найти способ уменьшить количество вызовов между Java и C/C++.
Я рекомендую вам проверить, что Build.MANUFACTURER является «Google» и что Build.MODEL начинается с «Glass». Другие производители могут сделать что-то, что имеет стекло в модели. – ErstwhileIII