0

Android で /data/data/com.example.myapp/ の test3.mid という曲を再生したい

サブディレクトリに配置する必要がありますか? または、間違った方法で setDataSource を呼び出していますか? アプリがクラッシュし、NullPointerException が発生します。

try {
        mediaPlayer.setDataSource("file://data/data/com.example.optimuse/test3");
        } catch (Exception e1) {
            e1.printStackTrace();
        }
try {
            mediaPlayer.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
4

2 に答える 2

2

わかった。キャッシュフォルダに入れて、動作するようになりました。さらに、私は愚かに新しいコマンドを忘れました(create()はそれを必要としないようだったので)。

私の作業コード:

私はファイルをキャッシュディレクトリに保存しました、それはうまくいきます!

File output = new File(getCacheDir() + "/exampleout.mid");

そして、ファイルを呼び出します。

    String filePath = null;
    File file = null;
    FileInputStream inputStream = null;
try {
           filePath = getCacheDir() + "/exampleout.mid";
           file = new File(filePath);

           inputStream = new FileInputStream(file);
           if(inputStream.getFD().valid())
           {
               System.out.println("Valid!");
           }
        } catch (Exception e1) {
            e1.printStackTrace();
            System.exit(-1);
        }

       try {
         mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource(inputStream.getFD());
        inputStream.close();
    } catch (Exception e1) {
        e1.printStackTrace();
        System.exit(-1);
    }

    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2012-07-25T12:26:17.613 に答える
1

1.ファイルをSDカードに直接ドロップした場合、次の方法でアクセスできます...

"/sdcard/test3.mp3"

2.しかし、上記の方法は適切な方法ではありません...適切な方法については、以下を参照してください。

String baseDirectory = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "test3.mp3";
File f = new File(baseDirectory + File.separator + fileName);
于 2012-07-24T17:56:36.390 に答える