簡體   English   中英

MediaPlayer錯誤-38,服務android中的0

[英]MediaPlayer Error -38, 0 in Service android

我的MediaPlayer內部具有服務,而Activity具有播放/暫停按鈕。 當我單擊按鈕時,我調用startService,但是沒有播放音樂,而是出現了錯誤:

09-01 19:10:10.216  15652-15652/com.itis.playerbuttontest E/MediaPlayer﹕ start called in state 4
09-01 19:10:10.216  15652-15652/com.itis.playerbuttontest E/MediaPlayer﹕ error (-38, 0)
09-01 19:10:10.230  15652-15652/com.itis.playerbuttontest E/MediaPlayer﹕ Error (-38,0)

有我的服務代碼

public class AudioService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {

private MediaPlayer mPlayer;

public static final String URL = "https://cs1-43v4.vk-cdn.net/p7/ad8c4f11cc535b.mp3?extra=CHu-724p52zJOrv5ebIhtHeN1rtSvD21LMlBmqODVgmB1zag_CkzocrdSxWpkweYMG_9cRgM_7z_izqbLsXzIX7KJ8EfuD-d";

private void releaseMp() {
    if (mPlayer != null) {
        mPlayer.release();
    }
    mPlayer = null;
}

@Override
public void onCreate() {
    super.onCreate();
    try {
        mPlayer = new MediaPlayer();
        mPlayer.setDataSource(URL);
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setOnPreparedListener(this);
        mPlayer.prepareAsync();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

@Override
public void onDestroy() {
    super.onDestroy();
    releaseMp();
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (intent.getAction().equals("PLAY") && !mPlayer.isPlaying()) {

        mPlayer.start();
    } else {
        mPlayer.pause();
    }

    return START_STICKY;
}

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

@Override
public void onCompletion(MediaPlayer mp) {
    stopSelf();
    }
}

並且有活動代碼:

public class MainActivity extends AppCompatActivity {

boolean playing = false;
private MorphButton button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (MorphButton) findViewById(R.id.playPauseBtn);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this, AudioService.class);
            i.setAction(playing ? "PAUSE" : "PLAY");
            playing = !playing;
            startService(i);
        }
    });

}

@Override
protected void onDestroy() {
    super.onDestroy();

    stopService(new Intent(this, AudioService.class));
    }
}

那那怎么了

錯誤可能是因為服務啟動時,媒體播放器尚未准備好。 因此,當您調用mPlayer.start() ,將引發異常。

在服務onCreate()而不是mPlayer.prepareAsync()嘗試mPlayer.prepare()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM