2

ユーザーがサーバーから .mp3 ファイルをダウンロードできるアプリケーションを開発しました。そして、そのようなファイルを保存するための mnt/sdcard/foldername へのパスを事前に定義しました。HTC、LG、Samsung でプログラムを実行したところ、問題なく動作しましたが、samsung galaxy s2 で同じプログラムを実行すると、mnt/sdcard/foldername に書き込み (保存) できないという問題が発生し、試してみました

 Environment.getExternalStorageDirectory().getAbsolutePath()

ただし、指定されたパスにダウンロードされたファイル名が表示され、各ファイルのプロパティにはゼロバイトが表示されます。この問題を解決するためのアイデアはありますか?

4

3 に答える 3

1

通常、SG2 には SD カードがなく、内部フラッシュ メモリを「外部」ストレージとして使用します。このコードでこの問題を解決しました:

    private File initCacheDir() {
        String sdState = android.os.Environment.getExternalStorageState();
            File imageCacheDir;
            if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) {
                File sdDir = android.os.Environment.getExternalStorageDirectory();      
                imageCacheDir = new File(sdDir, "Android/data/" + App.PACKAGE_NAME + "/files/imageCache");
            }
            else
                imageCacheDir = context.getCacheDir();

            if(!imageCacheDir.exists())
                 imageCacheDir.mkdirs();        
            return imageCacheDir;
}

このコードは、キャッシュ ディレクトリの場所を示していることに注意してください。通常、このディレクトリは、sd カードの Android/data フォルダーにあります。

SG2 でこの問題を解決する方法の詳細については、こちらを参照してください: How could i get the correct external storage on Samsung and all other devices?

于 2012-08-23T11:42:07.187 に答える
1

これを試して

 if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"yourfile");
    else
        cacheDir=context.getCacheDir();
    if(!cacheDir.exists())
        cacheDir.mkdirs();
于 2012-08-23T12:09:20.723 に答える
1

やっと見つけたコード

public void download(String urlToDownload){

URLConnection urlConnection = null;

try{

    URL url = new URL(urlToDownload);

    //Opening connection of currrent url

    urlConnection = url.openConnection();
    urlConnection.connect();

    //int lenghtOfFile = urlConnection.getContentLength();


String PATH = Environment.getExternalStorageDirectory() + "/1/";

File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "file.mp3");
FileOutputStream fos = new FileOutputStream(outputFile);

InputStream is = url.openStream();


byte[] buffer = new byte[1024];

int len1 = 0;

while ((len1 = is.read(buffer)) != -1) {
    fos.write(buffer, 0, len1);
}

fos.close();
is.close();

System.out.println("downloaded"+urlToDownload);

}catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();

}

}

出典:リンク

于 2012-09-17T10:53:40.923 に答える