如何在活动类中播放Android声音

时间:2014-06-03 21:26:14

标签: java android audio android-activity

如何从不扩展活动的课堂播放声音?我已经搜索了一段时间,在每个教程或者来自stackoverflow的答案中我都看到声音总是在活动类中实现。

但是在这种情况下我有一个类有我的游戏逻辑,其中我有一个gameUpdate()函数;并且在该功能中,如果发生某些事情(例如碰撞),我想发出特定的声音。我怎样才能从这个类中访问当前正在运行的活动?有没有办法做到这一点?

感谢。

4 个答案:

答案 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();
    }
  }
}