繁体   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