Erro ao acessar arquivos no SD Card

6 respostas
W

Pessoal, estou tendo um problema ao utilizar a FileConnection para acessar arquivos do meu celular. O código funciona perfeitamente no emulador do Netbeans, cujo diretório raiz é "/root1/". No meu celular, quando uso o método FileSystemRegistry.listRoots(), aparecem 3 diretórios raíz: 1. /mmc/ 2. /nor/ 3. /nand/. Como queria acessar os arquivos do SD Card, retirei o cartão para ver qual desses diretórios raíz sumiria, e o mmc sumiu. Fiz esse código usando o mmc como diretório raiz, mas quando executo ele no celular o celular TRAVA TOTALMENTE, de modo que só consigo recuperar o controle do celular se tirar a bateria forçadamente. Gostaria de saber o que estou fazendo de errado, se alguém puder me ajudar. Ele dá um erro na tela pedindo "permissão para download de jogos" (????), totalmente nada a ver.
obs: Meu celular tem a implementação desta API opcional pois busquei a propriedade de sistema "microedition.io.file.FileConnection.version" e retornou 1.0 ao invés de null.

Agradeço a atenção desde já.

package aula.ingles.tela;

import aula.ingles.*;
import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.lcdui.*;

public class TelaInicial extends Tela {
    private FileConnection arquivo;
    private static final String url = "file:///mmc/";

    private ChoiceGroup listaAulas = new ChoiceGroup("Aula:", List.POPUP);
    private Item botaoEntrar = new StringItem(null, "Entrar", Item.BUTTON);
    private Command comandoSair = new Command("Sair", Command.EXIT, 0);

    public TelaInicial(InglesMIDlet midletPai) {
        super("Inglês - Tela Inicial", midletPai);

        InputStream is = null;

        try {
            arquivo = (FileConnection) Connector.open(url);

            Enumeration arquivos = arquivo.list("*.txt", false);

            while(arquivos.hasMoreElements()) {
                listaAulas.append(arquivos.nextElement().toString(), null);
            }
        } catch(Exception e) {
            midletPai.destroyApp(true);
        } finally {
            if(arquivo != null) {
                try {
                    arquivo.close();
                } catch(Exception e) {}
            }
        }

        listaAulas.setLayout(Item.LAYOUT_2 | Item.LAYOUT_CENTER);
        botaoEntrar.setLayout(Item.LAYOUT_2 | Item.LAYOUT_CENTER);
        botaoEntrar.addCommand(new Command("", Command.ITEM, 0));
        botaoEntrar.setItemCommandListener(new ItemCommandListener() {
            public void commandAction(Command comando, Item item) {
                String numAula = listaAulas.getString(listaAulas
                        .getSelectedIndex()).substring(0, 4);
                TelaInicial.this.midletPai.setNumAula(numAula);
                TelaInicial.this.midletPai.irTelaPrincipal();
            }
        });

        tela.addCommand(comandoSair);
        tela.append(listaAulas);
        tela.append(botaoEntrar);
        tela.setCommandListener(new CommandListener() {
            public void commandAction(Command c, Displayable d) {
                TelaInicial.this.midletPai.destroyApp(true);
            }
        });
    }
}

6 Respostas

enrico.bo

Utiliza [color=green]System.getProperty(“fileconn.dir.memorycard”)[/color] para recuperar o diretório do cartão de memória…

W

Não deu certo… essa propriedade retorna null. Eu preciso acessar o sistema de arquivos do celular, não precisa ser exatamente do cartão.

W

agora descobri que precisa a aplicação estar assinada digitalmente pra funcionar esta API… :frowning:

enrico.bo

Então não necessáriamente precisa estar assinado, como já respondido pelo boone em outro tópico, a assinatura só é utilizada para evitar as mensagens de confirmação de acesso…

Tenta recuperar o diretório fileconn.dir.private…

Qual celular você está utilizando?

P

Sim, realmente não precisa.
Se acessa camera, diretórios e net mesmo sem certificado.
O que o certificado possibilita é o relaxamento da segurança, dando opção de vc configurar a aplicação para não mais te avisar caso ela vá acessar algo crítico, seja por custo ou privacidade.

W

Legal, então acho que o problema pode estar no meu celular mesmo, pois é tentar abrir uma FileConnection e o celular imediatamente trava com uma mensagem estranha pedindo permissão para “Download de Jogos”. O celular é um LG 550. Já tentei várias system properties, listar os root diretórios, usar c: e e: mas nada de resultado.

Criado 12 de agosto de 2010
Ultima resposta 16 de ago. de 2010
Respostas 6
Participantes 3