MCPcopy Create free account
hub / github.com/PolygonTek/BlueshiftEngine / AcquireASensorManagerInstance

Function AcquireASensorManagerInstance

Source/Player/AndroidMain.cpp:236–266  ·  view source on GitHub ↗

* AcquireASensorManagerInstance(android_app* app) * Workaround ASensorManager_getInstance() deprecation false alarm * for Android-N and before, when compiling with NDK-r15 */

Source from the content-addressed store, hash-verified

234 * for Android-N and before, when compiling with NDK-r15
235 */
236static 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
268static void InitSensors(android_app *appState) {
269 sensorManager = AcquireASensorManagerInstance(appState);

Callers 1

InitSensorsFunction · 0.70

Calls 1

CallObjectMethodMethod · 0.80

Tested by

no test coverage detected