3

MediaStore.Audio.Media コンテンツ プロバイダーの SD カードに mp3 ファイルが保存されているかどうかを確認するコード セクションがあります。

問題は、状況がどうであれということです。変数「audioFilename」に格納されたパス名のファイルがSDカード上に存在するかどうか。結果として常に「このファイルは存在しません」を返します。変数 audioFilename には「/mnt/sdCard/Music/Jungle.mp3」という文字列パス名が格納されているにもかかわらず、この MP3 ファイルは実際には SD カード上にあります。トーストメッセージとSDカードの内容の確認で簡単に証明できます。

ファイルまたは環境クラスの使用にエラーがある可能性があります。ここに示されているコードに問題が見られる人はいますか?

 // toast message to prove that the audioFilename is not null,
 // message displayed is the string, "File name: /mnt/sdCard/Music/Jungle.mp3"

 Toast.makeText(Editor.this, "File name: " + audioFilename,
 Toast.LENGTH_LONG).show();

 // the code below always returns "this file does not exist"

 File extStore = Environment.getExternalStorageDirectory();
 File myFile = new File(extStore.getAbsolutePath() + "audioFilename");

 if(myFile.exists()){

 Toast.makeText(Editor.this, "<<<< this file exists, it is: "+audioFilename+" >>>>",
 Toast.LENGTH_LONG).show();

 } else if(!myFile.exists()){

 Toast.makeText(Editor.this, "<<<< this file does not exist >>>> ",
 Toast.LENGTH_LONG).show();
 }

 Toast.makeText(Editor.this, "audio file name is: "+ audioFilename,
 Toast.LENGTH_LONG).show();
4

4 に答える 4

3

java.io.Fileをインポートしてもよろしいですか?

試してみてください:

String pathsd = Environment.getExternalStorageDirectory()+"/";
// so var pathsd will return "/mnt/sdcard/"
// then you must sure var audioFilename is Music/Jungle.mp3
File myFile = new File(pathsd + audioFilename);

それともあなたはあなたの道を確信していますか?わからない場合は、直接文字列パスを指定してみてください。

File myFile = new File("/mnt/sdCard/Music/Jungle.mp3");
于 2012-12-19T05:52:55.637 に答える
2

この行を変更してみてください

File myFile = new File(extStore.getAbsolutePath() + "audioFilename");

File myFile = new File(audioFilename);

同じコードでテストを実行しましたが、うまく機能しています。

これが私がテストするコードです:

String audioFilename =  "/sdcard/NewFolder/test1.jpg";

Toast.makeText(SimpleTest.this, "File name: " + audioFilename,
Toast.LENGTH_LONG).show();

// the code below always returns "this file does not exist"

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(audioFilename);

if(myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file exists, it is: "+audioFilename+" >>>>",
    Toast.LENGTH_LONG).show();

} else if(!myFile.exists()){

    Toast.makeText(SimpleTest.this, "<<<< this file does not exist >>>> ",
    Toast.LENGTH_LONG).show();
}

Toast.makeText(SimpleTest.this, "audio file name is: "+ audioFilename,
Toast.LENGTH_LONG).show();

お役に立てば幸いです。

ありがとう。

于 2012-12-19T05:53:15.107 に答える
0

私は推測を危険にさらし、物理デバイスを使用してアプリケーションをテストしていると仮定します。これが当てはまる場合、外部ストレージがマウントされていない可能性があり (コンピューターで USB ストレージを使用しているため)、システムによればファイルは実際には存在しません。USB コードを差し込まずにコードをテストしてみてください。

編集: 「audioFilename」を囲む引用符を削除します。

File myFile = new File(extStore.getAbsolutePath() + "audioFilename");

File myFile = new File(extStore.getAbsolutePath() + audioFilename);
于 2012-12-19T05:47:50.063 に答える
0

AndroidManifeast ファイルに権限を追加する必要があります

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

編集 :

File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(extStore+ "/Music/Jungle.mp3"); <---- try this
于 2012-12-19T05:47:06.177 に答える