如何从不扩展活动的课堂播放声音?我已经搜索了一段时间,在每个教程或者来自stackoverflow的答案中我都看到声音总是在活动类中实现。
但是在这种情况下我有一个类有我的游戏逻辑,其中我有一个gameUpdate()函数;并且在该功能中,如果发生某些事情(例如碰撞),我想发出特定的声音。我怎样才能从这个类中访问当前正在运行的活动?有没有办法做到这一点?
感谢。
答案 0 :(得分:0)
getActivity()
或if在片段getFragment().getActivity()
或者,您可以在类中添加Context
并从类的构造函数中获取活动引用。
例如:
public class MyClass {
Context mContext();
public MyClass(Context context){
this.context = context;
}
}
并在调用MyClass的Activity类中使用
MyClass myClass = new MyClass(this);
在您的自定义lass中,您可以使用其context引用活动方法。
答案 1 :(得分:0)
如果您需要获取当前Activity
实例或上下文,则需要将其传递给其他类,以便您可以使用它。例如:
class ABC extends Activity
{
public void onCreate(Bundle b)
{
XYZ xyz=new XYZ(this); // Sending the current Activity instance
}
}
class XYZ
{
ABC activity;
public XYZ(ABC activity)
{
this.activity = activity; //Now you can use it in this class
}
}
答案 2 :(得分:0)
所以你实际上只需要一个Context
,而不是Activity
( 一个Context
)。我建议应该播放声音的类有一个构造函数,需要Context
。保留引用,不是直接引用您收到的Context
,而是使用getApplicationContext()
引用应用程序上下文以获得可以安全保留的Context
,而不存在内存泄漏的风险。
public class MySoundPlayingClass {
private final Context mContext;
public MySoundPlayingClass(Context ctx) {
// Since ctx could be an Activity, and this class
// could exist outside of the lifecycle of the Activity,
// grab the Application context to get a safe reference.
mContext = ctx.getApplicationContext();
}
}
答案 3 :(得分:0)
拥有一个Util类并执行与下面类似的操作。您可以传递上下文(可以是Activity实例)和资源ID来播放它
用法:
Util.play(context, R.raw.soundFile);
Sample Util类:
public class Util {
public static void play(final Context context, int resource) {
MediaPlayer mp = MediaPlayer.create(context, resource);
if (null != mp) {
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start();
}
}
}