Я хочу реализовать поведение, подобное Whatsapp, когда пользователь может загружать изображение. Я попытался открыть изображения в своем приложении, но если изображение будет слишком большим, у меня будет ошибка нехватки памяти.
Чтобы решить эту проблему, я открываю пересылку изображений, которые будут открываться во встроенной программе просмотра изображений телефона, используя метод platformRequest()
.
Однако я хочу знать, как это Whatsapp изменяет встроенную программу просмотра изображений телефона, добавляя кнопку «Выбрать», с помощью которой пользователь выбирает изображение, которое он хочет загрузить. Как эта информация отправляется обратно в приложение J2ME и как изменяется размер изображения?
Изменить: я пробовал это двумя разными способами, оба из которых дали мне OOME.
Сначала я попробовал более прямой метод:
FileConnection fc = (FileConnection) Connector.open("file://localhost/" + currDirName + fileName);
if (!fc.exists()) {
throw new IOException("File does not exists");
}
InputStream fis = fc.openInputStream();
Image im = Image.createImage(fis);
fis.close();
Когда это не сработало, я попробовал более «ручной» подход, но это тоже дало мне ошибку.
FileConnection fc = (FileConnection) Connector.open("file://localhost/" + currDirName + fileName);
if (!fc.exists()) {
throw new IOException("File does not exists");
}
InputStream fis = fc.openInputStream();
ByteArrayOutputStream file = new ByteArrayOutputStream();
int c;
byte[] data = new byte[1024];
while ((c = fis.read(data)) != -1) {
file.write(data, 0, c);
}
byte[] fileData = null;
fileData = file.toByteArray();
fis.close();
fc.close();
file.close();
Image im = Image.createImage(fileData, 0, fileData.length);
Когда я вызываю метод createImage, в обоих случаях возникает ошибка нехватки памяти. Это зависит от устройства. E72 выдает ошибку с изображениями размером 3 МБ, в то время как более новое устройство выдает ошибку с изображениями размером более 10 МБ.