2015-09-01 4 views
0

У меня есть служба с MediaPlayer внутри и активность с кнопкой воспроизведения/паузы. Когда я нажимаю на кнопку, я называю StartService, но вместо того, чтобы играть музыку я ловлю ошибку:Ошибка MediaPlayer -38, 0 в службе android

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

Итак, что там не так?

+0

Я решил эту проблему. Был неправильный URL. Но теперь у меня другая проблема. Когда я запускаю приложение на Android 4+, все в порядке, но когда я пытаюсь нажать кнопку на Android 2.3, медиаплеер не запускается. Я смотрел logcat и видел, что метод onPrepare не звонит? И я поймаю Почему? –

+0

Также я ломаю ошибку (1, -2147483648). –

ответ

0

Возможно, ошибка связана с тем, что при запуске службы медиаплеер еще не подготовлен. Поэтому, когда вы вызываете mPlayer.start(), исключение вызывается.

In Service onCreate(), а не mPlayer.prepareAsync() попробуйте mPlayer.prepare().

Смежные вопросы