试图在Android应用程序上播放背景音乐

时间:2016-05-14 22:18:00

标签: android asynchronous android-asynctask

我目前正在尝试构建一个必须专门使用异步任务的应用程序。根据我的理解,异步任务将运行代码而不管正在生成的UI,但是当我看到它实现时,它必须在onStart,onResume方法中实现,这些方法不可避免地绑定到一个Activity。不确定我是否弄错了。此外,尝试运行我的类,即音乐播放器类,但它仍然停留在声明媒体播放器,这是从我的代码实际工作的另一个语句复制和粘贴。这是代码:

package mt.edu.mcast.clickermaster;

import android.media.MediaPlayer;
import android.os.AsyncTask;

public class MusicPlayer extends AsyncTask<Void, Void, Void>{

@Override
protected void onPreExecute(){
    super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {
    MediaPlayer player = MediaPlayer.create(this,R.raw.FluteMusic);
    player.setLooping(true);
    player.setVolume(1.0f,1.0f);
    player.start();
    return null;
}

@Override
protected void onPostExecute(Void result){
    super.onPostExecute(result);
}

}

错误是说“无法解析方法'创建(MusicPlayer,int)”,是的,我在原始文件夹中有'FluteMusic'

我感谢任何愿意伸出援手的人:)

1 个答案:

答案 0 :(得分:0)

MediaPlayer.create(this,R.raw.FluteMusic);

返回“无法解析方法'create(MusicPlayer,int)”,因为您传递的第一个元素this是对AsyncTask的引用,并且MediaPlayer类中没有将AsyncTask作为AsyncTask的方法一个参数。

我猜你要做的就是将Context作为参数传递。你可以在AsyncTask中有一个构造函数,以保持对Context的引用。

public class MusicPlayer extends AsyncTask<Void, Void, Void>{

Context mContext;

public MusicPlayer(Context context){
    mContext = context;
}

@Override
protected void onPreExecute(){
    super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {
    MediaPlayer player = MediaPlayer.create(mContext, R.raw.FluteMusic);
    player.setLooping(true);
    player.setVolume(1.0f,1.0f);
    player.start();
    return null;
}

@Override
protected void onPostExecute(Void result){
    super.onPostExecute(result);
}