Android - 创建Utility类来播放声音

时间:2012-12-01 17:19:29

标签: android media-player

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

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...
}

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

1 个答案:

答案 0 :(得分:1)

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

相反,尝试使其成为普通的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()或主要活动之后。