Senhores, boa noite!
Estou com um problema em uma aplicação J2ME, ela faz a captura de fotos e transmite as mesmas para um servidor.
A aplicação já roda normalmente em dois aparelhos testados, são eles:
Nokia 3120;
Nokia 2730.
Agora preciso que a aplicação rode no modelo Nokia 7230, mas a captura de fotos gera um problema.
Na aplicação, as dimensões da foto estão definidas em 640x480, entretando neste modelo Nokia 7230 ela fica bem menor.
Fiz um teste, para garantir que o problema não estava na recepção das fotos, fiz o processo de envio através de uma foto da galeria do aparelho e esta chega no tamanho adequado.
Penso que possa existir, neste modelo de aparelho, alguma peculiaridade que não aceite as definições definidas na aplicação.
Caso alguém já tenha passado por este problema ou saiba como resolver, ficarei grato pelo auxilio.
Abaixo o código que utilizo para avaliarem:
package app;
import componentes.FormatMessage;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import util.RMS;
import util.Utility;
public class CameraCanvas extends Canvas implements CommandListener, Runnable {
private Thread thread;
private Image imgFundo;
private Player player = null;
private VideoControl videoControl = null;
private boolean active = false;
private String message1 = null;
private byte[] image;
private Command captureCommand = null, exitCommand, galeriaCommand;
private String snapShotEncoding = "encoding=jpeg&width=550&height=380";
private boolean processoAtivo = false;
public CameraCanvas() {
exitCommand = new Command("Voltar", Command.SCREEN, 1);
galeriaCommand = new Command("Galeria", Command.EXIT, 0);
addCommand(exitCommand);
addCommand(galeriaCommand);
setCommandListener(this);
try {
try {
configPlayerImage();
start();
} catch (MediaException me) {
configPlayerVideo();
} catch (SecurityException se) {
close();
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + se.getMessage();
} catch (IOException ioe) {
close();
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + ioe.getMessage();
}
} catch (Exception ex) {
close();
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + ex.getMessage();
}
}
public void paint(Graphics g) {
try {
Font getFontProportionalBold = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_SMALL);
Font getFontMonospacePlain = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL);
try {
//imagem de fundo e popup
imgFundo = null;
imgFundo = Image.createImage("/imagens/fundo.png");
} catch (Exception err) {
}
g.setColor(Utility.corFundo);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(imgFundo, 0, 0, Graphics.TOP | Graphics.LEFT);
g.setFont(getFontProportionalBold);
g.setColor(0x00ff9900);
g.drawString(GIV.midlet.appVersion, 180, 60, Graphics.TOP | Graphics.LEFT);
if (message1 != null) {
g.setColor(0x00000000);
FormatMessage formatMessage = new FormatMessage(message1, 0x00000000,
getFontMonospacePlain,
23, 130, 205, 150, 12, true);
formatMessage.paint(g);
formatMessage.dispose();
formatMessage = null;
g.setFont(getFontProportionalBold);
g.setColor(0x00FFFFFF);
String strCancelar = "Cancelar";
g.drawString(strCancelar, 3, 298, Graphics.TOP | Graphics.LEFT);
strCancelar = null;
} else {
g.setFont(getFontProportionalBold);
g.setColor(0x00FFFFFF);
String strFoto = "Foto";
g.drawString(strFoto, 100, 298, Graphics.TOP | Graphics.LEFT);
strFoto = null;
}
g.setFont(getFontProportionalBold);
g.setColor(0x00FFFFFF);
String strLista = "Galeria";
g.drawString(strLista, 185, 298, Graphics.TOP | Graphics.LEFT);
imgFundo = null;
getFontMonospacePlain = null;
getFontProportionalBold = null;
} catch (NullPointerException npe) {
GIV.midlet.telas.showPrincipal();
} catch (Exception e) {
}
}
public void keyPressed(int key) {
if (message1 != null) {
if (key == Utility.RIGHT_SOFTKEY1) {
GIV.midlet.telas.cameraCanvasExit();
GIV.midlet.telas.showListFotos();
return;
} else if (key == Utility.LEFT_SOFTKEY1) {
GIV.midlet.telas.cameraCanvasExit();
GIV.midlet.telas.showTListComponentes();
return;
}
}
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
GIV.midlet.telas.cameraCanvasExit();
GIV.midlet.telas.showTListComponentes();
return;
} else if ((c == captureCommand) && (message1 == null)) {
if (!processoAtivo) {
processoAtivo = true;
thread = new Thread(this);
thread.start();
return;
}
} else if (c == galeriaCommand) {
GIV.midlet.telas.cameraCanvasExit();
GIV.midlet.telas.showListFotos();
return;
}
}
public void run() {
capturePhoto();
}
public void start() {
if (!active) {
try {
if (player != null) {
player.prefetch();
player.start();
}
if (videoControl != null) {
videoControl.setVisible(true);
}
active = true;
} catch (MediaException me) {
message1 = "MediaException: " + me.getMessage();
repaint();
} catch (SecurityException se) {
message1 = "SecurityException: " + se.getMessage();
repaint();
}
}
}
public void stop() {
if (active) {
try {
if (videoControl != null) {
videoControl.setVisible(false);
}
if (player != null) {
player.stop();
}
active = false;
} catch (MediaException me) {
message1 = "MediaException: " + me.getMessage();
repaint();
}
}
}
public void close() {
stop();
videoControl = null;
if (player != null) {
player.deallocate();
player.close();
player = null;
}
}
private void configPlayerImage() throws IOException, MediaException {
try {
active = false;
player = Manager.createPlayer("capture://image");
player.realize();
videoControl = (VideoControl) (player.getControl("VideoControl"));
if (videoControl != null) {
videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
captureCommand = new Command("Foto", Command.ITEM, 1);
addCommand(captureCommand);
try {
videoControl.setDisplayFullScreen(true);
} catch (MediaException me) {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + me.getMessage();
} catch (IllegalArgumentException iae) {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + iae.getMessage();
}
}
} catch (IOException ex) {
close();
} catch (MediaException ex) {
close();
}
repaint();
}
private void configPlayerVideo() {
try {
active = false;
player = Manager.createPlayer("capture://video");
player.realize();
videoControl = (VideoControl) (player.getControl("VideoControl"));
if (videoControl != null) {
videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
captureCommand = new Command("Foto", Command.ITEM, 1);
addCommand(captureCommand);
try {
videoControl.setDisplayFullScreen(true);
} catch (MediaException me) {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + me.getMessage();
} catch (IllegalArgumentException iae) {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + iae.getMessage();
}
}
repaint();
} catch (IOException ex) {
close();
} catch (MediaException ex) {
close();
}
}
public void capturePhoto() {
try {
boolean tryEncod = (snapShotEncoding != null && snapShotEncoding.length() > 0);
if (tryEncod) {
try {
image = videoControl.getSnapshot(snapShotEncoding);
} catch (MediaException me) {
tryEncod = false;
} catch (IllegalStateException ise) {
throw ise;
} catch (SecurityException se) {
throw se;
}
}
if (!tryEncod) {
try {
image = videoControl.getSnapshot(null);
} catch (MediaException me) {
throw me;
} catch (IllegalStateException ise) {
throw ise;
} catch (SecurityException se) {
throw se;
}
}
if ((image == null) || (image.length < 1)) {
throw new Exception("Photo is null.");
} else {
RMS.removeRecordStore("Nome_Foto");
RMS.removeRecordStore("Photo");
RMS rms = new RMS("Nome_Foto");
rms.adicionar("FotoEmAnexo.jpg");
rms.fechar();
rms.dispose();
rms = null;
rms = new RMS("Photo");
rms.adicionar(image);
rms.fechar();
rms.dispose();
rms = null;
GIV.midlet.telas.cameraCanvasExit();
GIV.midlet.telas.showTListComponentes();
dispose();
return;
}
} catch (MediaException me) {
if (me.getMessage().toLowerCase().indexOf("user refused permission") != -1) {
message1 = "Foi recusada a permissão para obter a foto\nRefaça novamente "
+ "o processo e selecione \"Sim\" para obter a foto.";
} else {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + me.getMessage();
}
close();
captureCommand = null;
addCommand(exitCommand);
addCommand(galeriaCommand);
setCommandListener(this);
repaint();
} catch (Exception e) {
close();
e.printStackTrace();
if (e.getMessage().toLowerCase().indexOf("user refused permission") != -1) {
message1 = "Foi recusada a permissão para obter a foto\nRefaça novamente "
+ "o processo e selecione \"Sim\" para obter a foto.";
} else {
message1 = "Erro ao obter camera. Contate o administrador.\nErro: " + e.getMessage();
}
if (e.getMessage().toLowerCase().equals("not allowed!")) {
message1 = "Erro ao obter foto.\nNecessário aceitar ativar a câmera quando a aplicação solicitar.";
close();
return;
}
captureCommand = null;
addCommand(exitCommand);
addCommand(galeriaCommand);
setCommandListener(this);
repaint();
}
}
public void dispose() {
try {
Utility.dispose();
close();
imgFundo = null;
message1 = null;
image = null;
System.gc();
} catch (Exception e) {
}
}
}