2016-05-14 87 views
0

我目前正在尝试构建一个应用程序,它必须专门使用异步任务。据我所知,异步任务将运行代码,而不管正在生成的UI如何,但是当我看到它实现时,它必须在onStart和onResume方法中实现,这些方法不可避免地与一个Activity绑定在一起。不知道我是否得到这个错误。此外,试图运行我的类是音乐播放器类,但它在宣告媒体播放器上停滞不前,而且这是从我的代码中的另一个实际工作的语句中复制和粘贴的。这里是代码:试图在Android应用上播放背景音乐

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'

我很欣赏的人谁都会伸出援助之手:)

+0

如果您的目的是将音乐播放器与用户界面分开(如用户放下音乐应用程序并浏览网页),则应使用“服务”。 'AsyncTask'可能看起来是个不错的选择,但它实际上服务于不同的目的:) –

回答

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

返回“无法解析方法“创建(MusicPlayer,INT)”,因为第一个元素传递,this,是一个参考ŧ o您的AsyncTask,并且MediaPlayer类中没有将AsyncTask作为参数的方法。

我猜你试图通过把这个,是通过一个上下文作为参数。您可以在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); 
} 
+0

#legend ...任何想法我可以做什么关于如何使它可以运行在每个活动而无需使用onPause, onStop,onResume和其他,在每个活动?按照Saehun的建议, –

+0

,对于不一定需要用户界面的后台任务,您应该查看服务:http://developer.android.com/guide/components/services.html – Gauthier

+0

唯一的问题是,我被明确告知使用Async任务。我知道它打赌使用服务,但我需要确保我使用异步任务。我错了吗?我是一个小白菜 –