我在Android方面不是很有经验,但我正在尝试制作媒体播放服务。我的开始和停止正在工作,但暂停/播放不起作用。我尝试了很多不同的方法,但总是不成功。
当我暂停并再次按下播放时,它从0开始或给我一个错误:
11-02 18:50:57.971 2043-2043/? E/MediaPlayer﹕ start called in state 2
11-02 18:50:57.971 2043-2043/? E/MediaPlayer﹕ error (-38, 0)
11-02 18:50:57.975 2043-2043/? E/MediaPlayer﹕ Error (-38,0)
这是我的主要活动:
package my.package;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btnStartSvc;
Button btnStopSvc;
Button btnPauseSvc;
Button btnResumeSvc;
private static final String TAG = "MyService";
private static final String TAG_LINK = "link";
private static final String TAG_PAUSE = "PAUSE";
private static final String TAG_STOP = "STOP";
private static final String TAG_ACTION = "ACTION";
private String pause = "pause";
private String stop = "stop";
private String link;
Context context;
boolean playPause;
private boolean initialStage = true;
MediaPlayer mediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStartSvc = (Button) findViewById(R.id.btnStartSvc);
btnStopSvc = (Button) findViewById(R.id.btnStopSvc);
btnPauseSvc = (Button) findViewById(R.id.btnPauseSvc);
btnResumeSvc = (Button) findViewById(R.id.btnResumeSvc);
link = "http://stats.jovemnerd.com.br/nc489alta.mp3";
context = this;
mediaPlayer = new MediaPlayer();
btnStartSvc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSvc();
}
});
btnStopSvc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopSvc();
}
});
btnPauseSvc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pauseSvc();
}
});
btnResumeSvc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resumeSvc();
}
});
}
public void resumeSvc(){
Intent i = new Intent(this,MyService.class);
i.putExtra("action", "my.package.action.RESUME");
startService(i);
}
public void pauseSvc(){
Intent i = new Intent(this,MyService.class);
i.putExtra("action", "my.package.action.PAUSE");
startService(i);
}
public void startSvc(){
Log.d(TAG, "Start");
Intent i = new Intent(this, MyService.class);
i.putExtra("action", "my.package.action.PLAY");
i.putExtra(TAG_LINK, link);
startService(i);
}
public void stopSvc(){
initialStage = true;
playPause=false;
Log.d(TAG, "Stop");
Intent i = new Intent(this, MyService.class);
stopService(i);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
服务:
package my.package;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.os.PowerManager;
import android.util.Log;
import java.io.IOException;
import java.net.URISyntaxException;
public class MyService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
private static final String ACTION_PLAY = "my.package.action.PLAY";
private static final String ACTION_PAUSE = "my.package.action.PAUSE";
private static final String ACTION_STOP = "my.package.action.STOP";
private static final String ACTION_RESUME = "my.package.action.RESUME";
private static final String TAG = "MyService";
private static final String TAG_LINK = "link";
private static final String TAG_PAUSE = "PAUSE";
private static final String TAG_STOP = "STOP";
private static final String TAG_ACTION = "ACTION";
private String url = "";
private String teste = "http://stats.jovemnerd.com.br/nc489alta.mp3";
private String action;
MediaPlayer mediaPlayer = null;
WifiManager.WifiLock wifiLock;
boolean playPause;
private boolean initialStage = true;
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
teste = intent.getStringExtra("action");
Log.d("Work: ", teste);
if (intent.getStringExtra("action").equals(ACTION_PLAY)) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
url = intent.getStringExtra(TAG_LINK);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
if (!playPause) {
//btnPlayPause.setImageResource(R.drawable.ic_pause_white);
if (initialStage) {
Log.d("PLAY", "PLAY");
mediaPlayer.prepareAsync();
wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
.createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");
wifiLock.acquire();
} else if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
//seekBar.setMax((int) finalTime);
}
playPause = true;
initialStage = false;
}
} else if (intent.getStringExtra("action").equals(ACTION_PAUSE)){
Log.d("PAUSE", "PAUSE");
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
if(mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
}
playPause = false;
initialStage = false;
mediaPlayer = null;
}
} /*else if (intent.getStringExtra("action").equals(ACTION_RESUME)){
if (!mediaPlayer.isPlaying())
mediaPlayer.start();
}*/
//url = intent.getStringExtra(TAG_LINK);
/*mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);*/
Log.d(TAG, "Start Command");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "Player Started");
mediaPlayer.start();
initialStage = false;
}
@Override
public void onCompletion(MediaPlayer mp) {
Log.d("Completed: ", "ok");
}
@Override
public void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
Log.d(TAG, "Stop Command" + action);
}
wifiLock.release();
initialStage = true;
playPause = false;
}
public void pausePlayer(){
if(mediaPlayer != null){
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
清单:
<service
android:name="my.package.MyService"
android:enabled="true"
android:exported="true" >
</service>
*服务位于<Application>
我希望你能帮助我。 THX。