0

Android Environment.getExternalStorageDirectory() の使い方

Environment.getExternalStorageDirectory() を使用して SD カードからイメージを読み書きするにはどうすればよいですか? またはそれを行うより良い方法はありますか?

ソースを使用してダウンロードし、画像を保存しました:

    try {

        URL url = new URL(urlBaseImagem + icone);
        URLConnection conection = url.openConnection();
        conection.connect();
        // this will be useful so that you can show a tipical 0-100% progress bar
        int lenghtOfFile = conection.getContentLength();

        //
        // download the file
        InputStream input = new BufferedInputStream(url.openStream(), 8192);

        // Output stream                
        //File sdCard = Environment.getExternalStoragePublicDirectory(DOWNLOAD_SERVICE);
        File sdCard = Environment.getExternalStorageDirectory();

        File directory = new File(sdCard.getAbsolutePath() + "/cardapioweb/rest/");

        if(directory.exists() == false){
            directory.mkdirs();
        }
        File outputFile = new File(directory, icone);

        OutputStream output = new FileOutputStream(outputFile);

        byte data[] = new byte[1024];

        long total = 0;

        while ((count = input.read(data)) != -1) {
            total += count;
            // publishing the progress....
            // After this onProgressUpdate will be called
            //publishProgress(""+(int)((total*100)/lenghtOfFile));

            // writing data to file
            output.write(data, 0, count);
        }

        // flushing output
        output.flush();

        // closing streams
        output.close();
        input.close();

        Log.w("CardapioWeb:" , "Imagem " + outputFile.toString() + " salva no sdcard");


    } catch (Exception e) {
        Log.e("Error: ", e.getMessage());
    }

ソースを使用して読み込み、画像を表示しました。

File arq = new File(this.sdCard.getAbsolutePath() + "/cardapioweb/rest/" + filialDataCollection.get(position).get(KEY_ICONE));

//verifica se a imagem foi baixada com sucesso
if(arq.exists() == true){
        //deve exibir a imagem do sdcard
        File outputFile1 = new File(this.sdCard.getAbsolutePath() + "/cardapioweb/rest/", filialDataCollection.get(position).get(KEY_ICONE));
        Drawable imagem = Drawable.createFromPath(outputFile1.toString());
        holder.tvWeatherImage.setImageDrawable(imagem);
 }

上記のコードは、Eclipse を使用したエミュレーター (Android 仮想デバイス) で完全に正常に動作します !!!! しかし、apk を生成して Galaxy S4 にインストールすると、アプリは画像を読み取ることができません (エラーは生成されません)。画像を表示しないだけです。何が間違っている可能性がありますか?

4

1 に答える 1

0

コードにログを入れて、何があるかを確認します

outputFile1.toString();

実際に指していますが、それはあなたが期待するものですか?

個人的には、outputFile1.getAbsolutePath(); を使用していたでしょう。以下の行ではありません:

Drawable imagem = Drawable.createFromPath(outputFile1.toString());
于 2013-08-28T15:33:41.817 に答える