安卓 - 创建实用程序类来播放声音



我有一个声音,我想在按钮点击时播放。在许多活动中发出相同的声音。因此,我认为创建一个具有播放声音的方法的 Utility 类可能是个好主意,我将从各种活动中调用它,而不是在所有其他活动中创建 MediaPlayer 变量。所以我创建了这个实用程序类:

public class Utilities extends Activity {
public MediaPlayer mpPositive;
public MediaPlayer mpNegative;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mpPositive = MediaPlayer.create(this, R.raw.click_positive);
    mpNegative = MediaPlayer.create(this, R.raw.click_negative);
}

public void playPositive() {
    mpPositive.start();
}
}

在我的活动中,我导入了此文件。然后我尝试像这样使用它:

public class ActivityListCategories extends ListActivity implements
     OnClickListener {
        private Utilities myUtilities;
        ...rest of the code...
    public void onCreate(Bundle savedInstanceState) {
    myUtilities = new Utilities();
            ...rest of the code...
            }
    }
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btnAdd:
        myUtilities.playPositive();
                    ...rest of the code...
}

但是当我单击按钮时 - 我的应用程序崩溃了。我做错了什么,我该如何解决?

您的代码崩溃是因为 UtilitiesonCreate() 方法永远不会被调用,因为您不将其用作普通Activity,并且它不遵循 Activity 生命周期。因此,您的this引用将始终为空。

相反,尝试将其设置为普通的Java类,如下所示:

public class Utilities extends Activity {
    public MediaPlayer mpPositive;
    public MediaPlayer mpNegative;
    public Utilities(Context context) {
        mpPositive = MediaPlayer.create(context, R.raw.click_positive);
        mpNegative = MediaPlayer.create(context, R.raw.click_negative);
    }

    public void playPositive() {
        mpPositive.start();
    }
}

然后创建一个对象,如下所示:

Utilities utils = new Utilities(this);

确保此行位于主活动onCreate()或之后。

最新更新