示例#1
0
const char * get_sdcarddir()
{
	static char buf[2000];

	jstring s =
		(jstring)_jni_callObjectMethod(
			_al_android_get_jnienv(),
			_al_android_activity_object(),
   			"getSDCardPrivateDir",
			"()Ljava/lang/String;"
		);
	
	if (s == NULL)
		return "";
	
	const char *native = _al_android_get_jnienv()->GetStringUTFChars(s, 0);

	strcpy(buf, native);

	_al_android_get_jnienv()->ReleaseStringUTFChars(s, native);

	_al_android_get_jnienv()->DeleteLocalRef(s);

	return buf;
}
示例#2
0
void logString(const char *s)
{
	jstring S = _al_android_get_jnienv()->NewStringUTF(s);

	_jni_callVoidMethodV(
		_al_android_get_jnienv(),
		_al_android_activity_object(),
		"logString",
		"(Ljava/lang/String;)V",
		S
	);
	
	_al_android_get_jnienv()->DeleteLocalRef(S);
}
示例#3
0
bool isAndroidConsole()
{
#if defined OUYA
	return true;
#endif

	static bool first = true;
	static bool is_console;

	if (!first) {
		return is_console;
	}

	first = false;
	is_console = false;

	JNIEnv *env = _al_android_get_jnienv();
	jobject object = _al_android_activity_object();

	jclass class_id = _jni_call(env, jclass, GetObjectClass, object);
	jmethodID method_id = _jni_call(env, jmethodID, GetMethodID, class_id, "getModel", "()Ljava/lang/String;");
	jstring s = (jstring)_jni_call(env, jobject, CallObjectMethod, object, method_id);

	if (s == NULL)
		return false;
	
	const char *native = _al_android_get_jnienv()->GetStringUTFChars(s, 0);

	if (strstr(native, "OUYA")) {
		is_console = true;
	}
	else if (!strncmp(native, "AFTB", 4) || !strncmp(native, "AFTM", 4)) {
		jmethodID method_id2 = _jni_call(env, jmethodID, GetMethodID, class_id, "getManufacturer", "()Ljava/lang/String;");
		jstring s2 = (jstring)_jni_call(env, jobject, CallObjectMethod, object, method_id2);
		const char *native2 = _al_android_get_jnienv()->GetStringUTFChars(s2, 0);
		if (!strcmp(native2, "Amazon")) {
			is_console = true;
		}
		_al_android_get_jnienv()->ReleaseStringUTFChars(s2, native2);
		_jni_callv(env, DeleteLocalRef, s2);
	}

	_al_android_get_jnienv()->ReleaseStringUTFChars(s, native);
	_jni_callv(env, DeleteLocalRef, s);
	_jni_callv(env, DeleteLocalRef, class_id);

	return is_console;
}
示例#4
0
static bool android_has_clipboard_text(ALLEGRO_DISPLAY *display)
{
   JNIEnv * env = (JNIEnv *)_al_android_get_jnienv();
   (void) display;
   return _jni_callBooleanMethodV(env, _al_android_activity_object(),
                                 "hasClipboardText", "()Z");
}
示例#5
0
static bool android_set_clipboard_text(ALLEGRO_DISPLAY *display, const char *text)
{
   JNIEnv * env = (JNIEnv *)_al_android_get_jnienv();
   jstring jtext= _jni_call(env, jstring, NewStringUTF, text);
   (void) display;
   return _jni_callBooleanMethodV(env, _al_android_activity_object(),
                                 "setClipboardText", "(Ljava/lang/String;)Z", jtext);
}
示例#6
0
void doIAP()
{
	_jni_callVoidMethodV(
		_al_android_get_jnienv(),
		_al_android_activity_object(),
		"doIAP",
		"()V"
	);
}
示例#7
0
void queryPurchased()
{
	_jni_callVoidMethodV(
		_al_android_get_jnienv(),
		_al_android_activity_object(),
		"queryPurchased",
		"()V"
	);
}
示例#8
0
int isPurchased()
{
	int ret = _jni_callIntMethod(
		_al_android_get_jnienv(),
		_al_android_activity_object(),
		"isPurchased"
	);

	return ret;
}
示例#9
0
static char *android_get_clipboard_text(ALLEGRO_DISPLAY *display)
{
   JNIEnv * env = (JNIEnv *)_al_android_get_jnienv();
   jobject jtext = _jni_callObjectMethod(env, _al_android_activity_object(), "getClipboardText", "()Ljava/lang/String;");
   jsize len = _jni_call(env, jsize, GetStringUTFLength, jtext);
   const char *str = _jni_call(env, const char *, GetStringUTFChars, jtext, NULL);
   char * text =  al_malloc(len+1);
   (void) display;

   text = _al_sane_strncpy(text, str, len);
   _jni_callv(env, ReleaseStringUTFChars, jtext, str);
   _jni_callv(env, DeleteLocalRef, jtext);

   return text;
}
示例#10
0
/* NOTE: don't put any ALLEGRO_DEBUG in here! */
static void android_cleanup(bool uninstall_system)
{
   if (already_cleaned_up) {
      return;
   }

   if (uninstall_system) {
      /* I don't think android calls our atexit() stuff since we're in a shared lib
         so make sure al_uninstall_system is called */
      al_uninstall_system();
   }

   finish_activity(_al_android_get_jnienv());

   (*javavm)->DetachCurrentThread(javavm);

   already_cleaned_up = true;
}
示例#11
0
static bool fs_apk_open_directory(ALLEGRO_FS_ENTRY *fse)
{
   ALLEGRO_FS_ENTRY_APK *e = (ALLEGRO_FS_ENTRY_APK *)fse;

   JNIEnv *jnienv;
   jnienv = _al_android_get_jnienv();
   jstring jpath = (*jnienv)->NewStringUTF(jnienv, e->path_cstr);
   jstring js = _jni_callStaticObjectMethodV(jnienv,
      _al_android_apk_fs_class(), "list",
      "(L" ALLEGRO_ANDROID_PACKAGE_NAME_SLASH "/AllegroActivity;Ljava/lang/String;)Ljava/lang/String;",
      _al_android_activity_object(), jpath);

   const char *cs = _jni_call(jnienv, const char *, GetStringUTFChars, js, NULL);
   e->file_list = al_malloc(strlen(cs) + 1);
   strcpy(e->file_list, cs);
   e->file_list_pos = e->file_list;

   _jni_callv(jnienv, ReleaseStringUTFChars, js, cs);
   _jni_callv(jnienv, DeleteLocalRef, js);
   _jni_callv(jnienv, DeleteLocalRef, jpath);

   e->is_dir_open = true;
   return true;
}