Java 在非活动类(上下文不工作)Android中播放声音类方法

Java 在非活动类(上下文不工作)Android中播放声音类方法,java,android,audio,methods,soundpool,Java,Android,Audio,Methods,Soundpool,我试图在我的android项目的几个类中播放我的声音池方法,但是它们不是活动类,所以我需要使用上下文。每当我编写代码并启动应用程序时,每次都会崩溃。我不能正确地使用上下文。任何帮助都将不胜感激。我会在这里发布代码 public class Sound1{ static SoundPool soundPool; static int soundId; static AudioManager audioManager; static int[] sm; /

我试图在我的android项目的几个类中播放我的声音池方法,但是它们不是活动类,所以我需要使用上下文。每当我编写代码并启动应用程序时,每次都会崩溃。我不能正确地使用上下文。任何帮助都将不胜感激。我会在这里发布代码

public class Sound1{

    static SoundPool soundPool;
    static int soundId;
    static AudioManager audioManager;
    static int[] sm;

    // private final Context mContext;
    Context context;


    public Sound1(Context context){
        this.context = context;
       // mContext = context.getApplicationContext();
    int maxStreams = 4;
        if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
            soundPool = new SoundPool.Builder()
                    .setMaxStreams(maxStreams)
                    .build();
        } else {
            soundPool = new SoundPool(maxStreams, AudioManager.STREAM_MUSIC, 0);
        }

        sm = new int[3];
        // fill your sounds
        sm[0] = soundPool.load(context, R.raw.sound1, 1);
        sm[1] = soundPool.load(context, R.raw.sound1, 1);
        sm[2] = soundPool.load(context, R.raw.sound1, 1);

        audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    }

    public void playSound(int sound) {

        soundPool.play(sm[sound], 1, 1, 1, 0, 1f);
    }
}



Sound1 sound1 = new Sound1(this);


    public Player(GameScreen gameScreen, GameEventHandler mGameEventHandler) {
        // Store the centre of the screen
        //screenCentre.x = gameScreen.getGame().getScreenWidth() / 2;
        //screenCentre.y = gameScreen.getGame().getScreenHeight() / 2;
        this.mGameEventHandler = mGameEventHandler;
        //mDeck = new Deck(mGameScreen);
        Move1BoundingBox = new BoundingBox(
                mGameScreen.getGame().getScreenWidth()/2, mGameScreen.getGame().getScreenHeight()/2 + 20,
                210, 90);
        Move2BoundingBox = new BoundingBox(
                mGameScreen.getGame().getScreenWidth()/2, mGameScreen.getGame().getScreenHeight()/2 + 110,
                210, 90);
        ExpandedBoundingBox = new BoundingBox(mGameScreen.getGame().getScreenWidth()/2,
                mGameScreen.getGame().getScreenHeight()/2, 210, 150);
    }

    public void update(ElapsedTime elapsedTime) {
        // Consider any touch events occurring since the update;
        Input input = mGameScreen.getGame().getInput();
        sound1.playSound(1);
        if (input.getTouchEvents().size() != 0) {
            if (input.existsTouch(0)) {
                // Get the primary touch event
                isPlayerTouch = true;
堆栈跟踪

04-21 14:08:08.609 18358-18358/uk.ac.qub.eeecs.gage D/ViewRootImpl: VIEWPOSTMEINPUTSTAGE操作向下04-21 14:08:08.649 18358-18398/uk.ac.qub.eeecs.gage V/MediaPlayer JNI:isplay:0 04-21 14:08:08.699 18358-18398/uk.ac.qub.eeecs.gage V/MediaPlayer JNI: 显示:0 04-21 14:08:08.749 18358-18398/uk.ac.qub.eeecs.gage V/MediaPlayer JNI:isPlaying:0 04-21 14:08:08.969 18358-18398/uk.ac.qub.eeecs.gage E/AndroidRuntime:致命异常: 螺纹-2376 流程:uk.ac.qub.eeecs.gage,PID:18358
java.lang.RuntimeException:无法在该线程内创建处理程序 尚未调用Looper.prepare() android.os.Handler.(Handler.java:200) 位于android.os.Handler.(Handler.java:114) 在android.app.Activity。(Activity.java:889) 在uk.ac.qub.eeecs.game.cardemo.Player.(Player.java:0) 在 uk.ac.qub.eeecs.game.cardDemo.CardDemoGameScreen.(CardDemoGameScreen.java:127) 位于uk.ac.qub.eeecs.game.MenuScreen.update(MenuScreen.java:103) 在uk.ac.qub.eeecs.gage.Game.doUpdate上(Game.java:330) 在uk.ac.qub.eeecs.gage.Game.access$200(Game.java:26) 位于uk.ac.qub.eeecs.gage.Game$GameLoop.run(Game.java:527) 运行(Thread.java:818)


“每当我编写代码并启动应用程序时,每次都会崩溃”--使用LogCat检查与崩溃相关的Java堆栈跟踪:“Java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序”这是我收到的消息,但是每当我使用Sound1 Sound1=new Sound1(此);和声音1.播放声音(1);我认为问题在于这两行代码。请编辑您的问题并发布整个Java堆栈跟踪。还请确保堆栈跟踪中引用的代码在您的问题中。