151
General discussions / Re: Android and iOS ports available for testing
« on: September 14, 2014, 07:45:04 pm »
Main problem is to load sfml-activity. May be little loader on Java will help.
Secondary problem, for me, there is bug with activity->internal(external)DataPath, it always NULL. This bug was fixed since 3.0.
Little hack for it, but i can't test it because main problem is not solved. =)
Secondary problem, for me, there is bug with activity->internal(external)DataPath, it always NULL. This bug was fixed since 3.0.
Little hack for it, but i can't test it because main problem is not solved. =)
std::string GetInternalDataPath()
{
priv::ActivityStates* states = priv::getActivity(NULL);
Lock(states->mutex);
const char* path = states->activity->internalDataPath;
if (!path)
{
JNIEnv* jni;
states->activity->vm->AttachCurrentThread(&jni, NULL);
jclass activityClass = jni->GetObjectClass(states->activity->clazz);
jmethodID getFilesDir = jni->GetMethodID(activityClass, "getFilesDir", "()Ljava/io/File;");
jobject fileObject = jni->CallObjectMethod(states->activity->clazz, getFilesDir);
jclass fileClass = jni->GetObjectClass(fileObject);
jmethodID getAbsolutePath = jni->GetMethodID(fileClass, "getAbsolutePath", "()Ljava/lang/String;");
jobject pathObject = jni->CallObjectMethod(fileObject, getAbsolutePath);
path = jni->GetStringUTFChars((jstring)pathObject, NULL);
jni->DeleteLocalRef(pathObject);
jni->DeleteLocalRef(fileClass);
jni->DeleteLocalRef(fileObject);
jni->DeleteLocalRef(activityClass);
states->activity->vm->DetachCurrentThread();
}
return path ? std::string(path) : "";
}
{
priv::ActivityStates* states = priv::getActivity(NULL);
Lock(states->mutex);
const char* path = states->activity->internalDataPath;
if (!path)
{
JNIEnv* jni;
states->activity->vm->AttachCurrentThread(&jni, NULL);
jclass activityClass = jni->GetObjectClass(states->activity->clazz);
jmethodID getFilesDir = jni->GetMethodID(activityClass, "getFilesDir", "()Ljava/io/File;");
jobject fileObject = jni->CallObjectMethod(states->activity->clazz, getFilesDir);
jclass fileClass = jni->GetObjectClass(fileObject);
jmethodID getAbsolutePath = jni->GetMethodID(fileClass, "getAbsolutePath", "()Ljava/lang/String;");
jobject pathObject = jni->CallObjectMethod(fileObject, getAbsolutePath);
path = jni->GetStringUTFChars((jstring)pathObject, NULL);
jni->DeleteLocalRef(pathObject);
jni->DeleteLocalRef(fileClass);
jni->DeleteLocalRef(fileObject);
jni->DeleteLocalRef(activityClass);
states->activity->vm->DetachCurrentThread();
}
return path ? std::string(path) : "";
}