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-card 上,那么您可以通过这种方式访问​​它...

"/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 回答