简体   繁体   中英

Android MediaPlayer error

E/MediaPlayer: EventHandler handleMessage thread id is 1
 E/MediaPlayer: EventHandler handleMessage thread id is 1
 E/MediaPlayer: currentThread is 1, handleMessage mTimeProvider hashcode is 1112571032, mTimeProvider is android.media.MediaPlayer$TimeProvider@42507c98, msg is { when=-19ms what=7 target=android.media.MediaPlayer$EventHandler }

I get the above error when trying to play audio, any ideas why I get this error, the same code works in some places, I'm calling the static function from a fragment?

  Global.playAudio("sounds/add_comment.mp3",context); 
public static void playAudio(String aud, Context context) {
final MediaPlayer mp;

try {
    AssetFileDescriptor fileDescriptor =
            context.getAssets().openFd(aud);
    mp = new MediaPlayer();
    mp.setDataSource(fileDescriptor.getFileDescriptor(),
            fileDescriptor.getStartOffset(),
            fileDescriptor.getLength());
    fileDescriptor.close();
    mp.prepare();
    mp.start();
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}

Let me know if this helped -

public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener,AudioManager.OnAudioFocusChangeListener{
MediaPlayer mp;
AudioManager mAudioManager ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int result = mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN);
    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        //got audio focus
        playAudio("bell.mp3",this);
    }

}

private void playAudio(String aud, Context context) {
    try {
        AssetFileDescriptor fileDescriptor =
                context.getAssets().openFd(aud);
        mp = new MediaPlayer();
        mp.setDataSource(fileDescriptor.getFileDescriptor(),
                fileDescriptor.getStartOffset(),
                fileDescriptor.getLength());
        fileDescriptor.close();
        mp.prepareAsync();
        mp.setOnPreparedListener(this);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


@Override
public void onPrepared(MediaPlayer mediaPlayer) {
    mp.start();
}

@Override
public void onAudioFocusChange(int i) {

}
}

Here, I am first trying to get the audio focus and then letting the mediaplayer do the task asynchronously.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM