Здравствуйте
Я хочу дать возможность пользователю выбрать фото из галереи девайса.
Вот так я запускаю метод в 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 карте, приложение через полминуты замержает, и вываливается
"Извините. Приложение не отвечает". Может быть как-то нужно активити эту "убивать" ? Если да, то как ?
Кто-нибудь знает где я ошибся ?