2

私はAndroidアプリ開発に不慣れで、おそらくかなり単純な質問だと思いますが、やりたいことを行う方法を理解するのに苦労しています...

ボタンを押すと音を鳴らす簡単なアプリケーションがあります。サウンドが再生された後、アプリケーションがオーディオをアプリケーションの開始前に再生していたものに戻すようにしたいと思います (たとえば、音楽アプリが再生されている場合、サウンドは再生中に音楽を中断し、制御を戻して再開する必要があります)。 setOnCompletionListener メソッドを使ってみましたが、うまくいきませんでした。

コードは次のとおりです。

public class MainActivity extends Activity implements OnClickListener{

public MediaPlayer mp = null;
public ImageButton playm = null;
public AudioManager audioManager = null;

/** called when activity first created */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

    //Sigh Button
    playm = (ImageButton) findViewById(R.id.sighButton);
    playm.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if (v==playm){
        OnAudioFocus onAudioFocus=new OnAudioFocus(this);
        audioManager.requestAudioFocus(onAudioFocus, AudioManager.STREAM_MUSIC, 
                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
        playSighSound();
    }
}

public void playSighSound(){
        mp = MediaPlayer.create(this, R.raw.ohboy); 
        try {
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener(){

            @Override
            public void onCompletion(MediaPlayer mp){
            mp.release();
            }
        });
        } catch (IllegalArgumentException e){
            e.printStackTrace();
        } catch (IllegalStateException e){
            e.printStackTrace();
        }
    }
}

class OnAudioFocus implements AudioManager.OnAudioFocusChangeListener{
    MainActivity onAudioFocus;

    public OnAudioFocus(MainActivity onAudioFocus){
        this.onAudioFocus = onAudioFocus;
    }


public void onAudioFocusChange(int focusChange) {
    switch(focusChange){
    case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
        onAudioFocus.playSighSound();
        break;

    }
}
}
4

1 に答える 1