Playing sound on the alarm channel on android

The problem is that create() puts the MediaPlayer in a state where it won’t accept the attributes (it calls prepare() for you). You need to use the more verbose mechanism of creating the player.

  final MediaPlayer mediaPlayer = new MediaPlayer();
  mediaPlayer.setDataSource(...);

  AudioAttributes attrs = new AudioAttributes.Builder().setUsage(usage).build();
  mediaPlayer.setAudioAttributes(attrs);

  new AsyncTask<Void,Void,Boolean>() {
    @Override
    protected Boolean doInBackground(Void... voids) {
      try {
        mediaPlayer.prepare();
        return true;
      } catch (IOException e) {
        e.printStackTrace();
      }
      return false;
    }

    @Override
    protected void onPostExecute(Boolean prepared) {
      if (prepared) {
          mediaPlayer.start();
      }
    }
  }.execute();

Leave a Comment