Android媒体播放服务暂停/播放

时间:2015-11-03 00:07:18

标签: android android-service android-mediaplayer

我在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。

0 个答案:

没有答案