简体   繁体   English

MediaPlayer错误-38,服务android中的0

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

I have service with MediaPlayer inside and Activity with play/pause button. 我的MediaPlayer内部具有服务,而Activity具有播放/暂停按钮。 When I click on button, I call startService, but instead of playing music I catch error: 当我单击按钮时,我调用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)

There is my Service code 有我的服务代码

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();
    }
}

And there is Activity code: 并且有活动代码:

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));
    }
}

So, what's wrong there? 那那怎么了

Probably the error is because when the service starts, the media player isn't yet prepared. 错误可能是因为服务启动时,媒体播放器尚未准备好。 So when you call mPlayer.start() the exception is thrown. 因此,当您调用mPlayer.start() ,将引发异常。

In Service onCreate() , instead of mPlayer.prepareAsync() try mPlayer.prepare() . 在服务onCreate()而不是mPlayer.prepareAsync()尝试mPlayer.prepare()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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