android 为什么我的MediaPlayer方法在移动到类中时不起作用?

5us2dqdw  于 2023-01-28  发布在  Android
关注(0)|答案(1)|浏览(154)

我有一些在MainActivity中播放声音的方法。
它们看起来像这样,工作正常。

public void hydrogen(){
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.hydrogen);
        mp.start();
    }

我想我应该把它们移到一个类中,这样我就可以在其他活动中使用这些方法。
这是我在课堂上学到的:
导入安卓系统媒体播放器;

public class Sounds {

     void hydrogen(){
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.hydrogen);
        mp.start();
           }
   
}

在“这个”和R.原料氢下面有红色下划线。
当我把方法设为静态时,hydrogen下面的行消失了,但是我不能去掉this下面的行。
有人知道我做错了什么吗?
问题描述为:无法解析方法“create(com.xxmassdeveloper.lrwhack2.Sounds,int)”
谢谢

ve7v8dk2

ve7v8dk21#

MediaPlayer.create(Context context, int resid)的第一个参数消耗Context
如果你查看Activity类,它扩展了Context,因此在Activity类的函数中,你可以使用this,它引用你所在的Activity类。
对于你的类Sounds来说,它只是一个简单的类,与Context没有关系,所以你需要把Context传入这个类,如下所示:

public class Sound {
    // Create a local variable Context so that you can access it in functions of this Class
    private Context context;

    // Create a constructor with Context
    public Sound(Context context) {
        this.context = context;
    }

    void hydrogen() {
        final MediaPlayer mp = MediaPlayer.create(context, R.raw.colors);
        mp.start();
    }
}

然后,您可以将传递的Context用于您的函数。

相关问题