0

我在媒体播放器上实现了一个文件选择器,它返回外部SD 上.mp3 和.srt 的文件路径。音频播放良好。但是,当我使用 .srt 的路径调用 addTimedTextSource 时,它​​会引发空指针异常。所以,我输入了一个 If(file.exists)。它还返回一个空值。我尝试将文件移动到内部 SD,结果相同。有任何想法吗?

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);
    txtDisplay = (TextView) findViewById(R.id.txtDisplay);
    buttonPause = (Button) findViewById(R.id.buttonPause);
    buttonPlay = (Button) findViewById(R.id.buttonPlay);

    Bundle bundle = getIntent().getExtras();
    if(bundle!=null) {
        String removeString = "file:";
        soundPath = bundle.getString("soundFile");
        subPath = bundle.getString("subFile");
        subPath = removeString(subPath,removeString);
        soundFile = new File(soundPath);
        subFile = new File(subPath);
    }
    player = new MediaPlayer();
    try {
        player.setDataSource(soundPath);
        player.setOnErrorListener(this);
        player.setOnPreparedListener(this);
        player.prepareAsync();

    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
public void onPrepared(MediaPlayer mp){
    mp.setOnTimedTextListener(this);
    if(subFile.exists() {
        try {
            player.addTimedTextSource(subFile.getAbsolutePath(), MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
        } catch (IOException e) {
            Log.v("Hey Here is a Problem: ", e.getMessage());
        }
        TrackInfo[] ti = player.getTrackInfo();
        for (int i = 0; i < ti.length; i++) {
            if (ti[i].getTrackType() == TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {
                player.selectTrack(i);
                break;
            }
        }
    }else{
        onBackPressed();
    }
    mp.start();
}
4

1 回答 1

0

编辑:重新阅读您的问题,subfile.exists() 似乎返回 true,但是当您尝试调用 player.addTimedTextSource() 时会出现空指针异常。

假设 player 不为空,我希望你试试这个:

string fileStr = subfile.getAbsolutePath();
player.addTimedTextSource(fileStr, MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);

我怀疑您可能遇到了 addTimedTextSource() 的重载问题。


老答案:

所以,我输入了一个 If(file.exists)。它还返回一个空值。我尝试将文件移动到内部 SD,结果相同。有任何想法吗?

提供的路径中没有文件。由于您已移动文件,因此您似乎输入了错误的文件名。

于 2015-03-04T18:28:40.547 回答