[Android] JNI.createStaticMethod открытие галереи девайса - приложение временами зависает

Здравствуйте
Я хочу дать возможность пользователю выбрать фото из галереи девайса.

Вот так я запускаю метод в java activity

jni_get_gallery_method = JNI.createStaticMethod("dev/div0/RailDesigner/MainActivity", "getGallery", "(Lorg/haxe/nme/HaxeObject;)V", true);
 jni_get_gallery_method([this]);

MainActivity.java

package ::APP_PACKAGE::;

 import android.app.Activity;
 import android.os.Bundle;
 import android.content.Intent;
 import android.util.Log;
 import android.net.Uri;

 import android.provider.MediaStore;
 import android.database.Cursor;

 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ByteArrayOutputStream;

 import org.haxe.nme.HaxeObject;

 public class MainActivity extends org.haxe.nme.GameActivity {
 static HaxeObject callback;

 public static void getGallery(HaxeObject cb){
 Log.d("log_tag", "get_gallery()" );
 callback=cb;
 Log.d("log_tag", "callback="+callback);
 Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
 photoPickerIntent.setType("image/*");
 getInstance().startActivityForResult(photoPickerIntent, 1);
 }

 protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
 super.onActivityResult(requestCode, resultCode, data);
 Log.d("log_tag", "onActivityResult resultCode="+resultCode);
 Log.d("log_tag", "callback="+callback);

 if (resultCode == RESULT_OK)
 {
 final Uri chosenImageUri = data.getData();
 Log.d("log_tag", "image="+getRealPathFromURI(chosenImageUri));

 callback.call("deviceGalleryFileSelectCallback", new Object[] {getRealPathFromURI(chosenImageUri)});

 /*
 org.haxe.nme.GameActivity.getInstance().runOnUiThread(new Runnable() {
 public void run() {
 callback.call("deviceGalleryFileSelectCallback", new Object[] {getRealPathFromURI(chosenImageUri)});
 }
 });
 */

 }
 else
 {
 Log.d("log_tag", "Activity error result ");
 }
 }

 private final String getRealPathFromURI(Uri contentUri) {
 String[] proj = { MediaStore.Images.Media.DATA };
 Cursor cursor = managedQuery(contentUri, proj, null, null, null);
 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
 cursor.moveToFirst();
 return cursor.getString(column_index);
 }

 }

Активити возвращает путь к файлу на SD карте
Иногда в обработчике onActivityResult значение статической переменной callback есть, а иногда оно равно null

Вот java лог

 02-18 00:38:28.527: D/log_tag(1524): get_gallery()
 02-18 00:38:28.528: D/log_tag(1524): callback=org.haxe.nme.HaxeObject@4056a240
 02-18 00:38:43.311: D/log_tag(1628): onActivityResult resultCode=-1
 02-18 00:38:43.312: D/log_tag(1628): callback=null
 02-18 00:38:43.335: D/log_tag(1628): image=/mnt/sdcard/DCIM/Camera/IMG_20121001_121422.jpg

Это первая проблема.

Вторая:
Даже если активити отработала правильно и отдала путь на SD карте, приложение через полминуты замержает, и вываливается
"Извините. Приложение не отвечает". Может быть как-то нужно активити эту "убивать" ? Если да, то как ?

Кто-нибудь знает где я ошибся ?

увы

пытался что-то предположить, но не смог.
попробовал java код (кроме callback конечно) в нативном приложении и каких-либо проблем в нем не обнаружил. Проблема скорее всего где-то в принимающем или обрабатывающем полученные данные коде, или в том, что блокируется UI-поток.
Если есть возможность выложить где-то работающий исходник, чтобы можно было потестировать, я бы взглянул.

P.S. здесь поддерживается отображение форматирования кода (отступы). пожалуйста в следующий раз постарайтесь сделать код более читаемым, чтобы проще было быстро увидеть его суть - будет больше вероятность получить фидбэк.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
r
C
d
1
v
C
Enter the code without spaces and pay attention to upper/lower case.