* AcquireASensorManagerInstance(android_app* app) * Workaround ASensorManager_getInstance() deprecation false alarm * for Android-N and before, when compiling with NDK-r15 */
| 234 | * for Android-N and before, when compiling with NDK-r15 |
| 235 | */ |
| 236 | static ASensorManager *AcquireASensorManagerInstance(android_app *app) { |
| 237 | typedef ASensorManager *(*PF_GETINSTANCEFORPACKAGE)(const char *name); |
| 238 | void *androidHandle = dlopen("libandroid.so", RTLD_NOW); |
| 239 | PF_GETINSTANCEFORPACKAGE getInstanceForPackageFunc = (PF_GETINSTANCEFORPACKAGE)dlsym(androidHandle, "ASensorManager_getInstanceForPackage"); |
| 240 | |
| 241 | if (getInstanceForPackageFunc) { |
| 242 | JNIEnv *env = nullptr; |
| 243 | app->activity->vm->AttachCurrentThread(&env, nullptr); |
| 244 | |
| 245 | jclass android_content_Context = env->GetObjectClass(app->activity->clazz); |
| 246 | jmethodID midGetPackageName = env->GetMethodID(android_content_Context, "getPackageName", "()Ljava/lang/String;"); |
| 247 | jstring packageName= (jstring)env->CallObjectMethod(app->activity->clazz, midGetPackageName); |
| 248 | |
| 249 | const char *nativePackageName = env->GetStringUTFChars(packageName, 0); |
| 250 | ASensorManager *mgr = getInstanceForPackageFunc(nativePackageName); |
| 251 | env->ReleaseStringUTFChars(packageName, nativePackageName); |
| 252 | app->activity->vm->DetachCurrentThread(); |
| 253 | if (mgr) { |
| 254 | dlclose(androidHandle); |
| 255 | return mgr; |
| 256 | } |
| 257 | } |
| 258 | |
| 259 | typedef ASensorManager *(*PF_GETINSTANCE)(); |
| 260 | PF_GETINSTANCE getInstanceFunc = (PF_GETINSTANCE) dlsym(androidHandle, "ASensorManager_getInstance"); |
| 261 | // by all means at this point, ASensorManager_getInstance should be available |
| 262 | assert(getInstanceFunc); |
| 263 | dlclose(androidHandle); |
| 264 | |
| 265 | return getInstanceFunc(); |
| 266 | } |
| 267 | |
| 268 | static void InitSensors(android_app *appState) { |
| 269 | sensorManager = AcquireASensorManagerInstance(appState); |
no test coverage detected