在非Activity类中使用MediaPlayer

时间:2012-04-21 11:52:27

标签: android this android-mediaplayer media android-context

我在非活动类中使用android MediaPlayer时遇到了一些麻烦,总是出现上下文错误。这是错误的行:

MediaPlayer Shoot = MediaPlayer.create(this, R.raw.shot);

现在我知道我不能在服务中使用“this”,但我尝试过的所有其他内容都不断给出错误。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你太幸运了,因为在过去的两天里我开发了一个在后台服务中使用MediaPlayer的应用程序;)

您可以使用下一行简单地检索MediaPlayer的实例:

MediaPlayer mediaPlayer = new MediaPlayer();

然后你可以设置你想要的所有听众和播放歌曲。

编辑2012年4月22日

设置监听器(示例):

        mediaPlayer.setOnErrorListener(new OnErrorListener() {                

                public boolean onError(MediaPlayer mp, int what, int extra) {
                        // TODO notify error to user or play next song
                        return true;
                }
        });
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {                       

                public void onCompletion(MediaPlayer mp) {
                        // TODO Notify to user the completion of song or play next song
                }
        });

要开始播放歌曲,您必须执行以下操作:

try{
    mediaPlayer.setDataSource(mSongUrl);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.prepare(); 
} catch (Exception e) {
    e.printStackTrace();
} 
// Starting media player
mediaPlayer.start();

答案 1 :(得分:0)

为什么不直接将上下文引用传递给非活动类的构造函数。 然后从那里保存并将其传递到需要的地方。

确保您的上下文引用在使用后不再保持活动状态。否则它会引起记忆问题。