为什么我的 MediaPlayer 方法在移入类后不起作用?

问题描述 投票:0回答:1

我有一些在 MainActivity 中播放声音的方法。

它们看起来像这样,而且工作得很好。

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

我想我应该将它们转移到一个类中,这样我就可以在其他活动中使用这些方法。

这就是我在课堂上的内容:

导入 android.media.MediaPlayer;

public class Sounds {

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

我在“this”和 R.raw.Hydrogen 下看到红色下划线。

当我使方法静态时,氢下的线条消失,但我无法摆脱“this”下的线条。

我做错了什么?

错误信息是:

无法解析方法“create(com.xxmassdeveloper.lrwhack2.Sounds, int)”

android class
1个回答
2
投票

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
用于您的函数。

© www.soinside.com 2019 - 2024. All rights reserved.