Сервис Android MediaPlayer - PullRequest
       5

Сервис Android MediaPlayer

0 голосов
/ 13 января 2012

Я хочу запустить Service для воспроизведения музыки из моего приложения, когда пользователь закрывает его.Я много искал вокруг, и все, что я действительно искал, это простой пример, который позволит мне запускать сервис и музыку, когда пользователь нажимает кнопку.И когда пользователь возвращается в приложение в какой-то другой момент и нажимает другую кнопку, я хочу привязать к сервису и остановить воспроизведение музыки.Я много искал и надеялся, что кто-нибудь сможет дать мне четкое объяснение того, как все это работает, и, возможно, даже пример кода.

Ответы [ 2 ]

0 голосов
/ 20 октября 2014

Я реализовал этот класс musi cservcie, который работает нормально

   public class MusicSrvice extends Service  implements MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener, MediaPlayer.OnInfoListener{
      public static final String ACTION_STOP="com.example.music4u.ACTION_STOP";
        public static final String ACTION_PLAY="com.example.music4u.ACTION_PLAY";
        public static final String ACTION_PAUSE="com.example.music4u.ACTION_PAUSE";
    private final IBinder mBinder = new ServiceBinder();
    MediaPlayer mPlayer;
    String  path="";
    private int length = 0;
    private boolean isPlaying = false;
    private static final int NOTIFICATION_ID = 1;

    public MusicSrvice() { }

    public class ServiceBinder extends Binder {
         MusicSrvice getService()
         {
            return MusicSrvice.this;
         }
    }

    @Override
    public IBinder onBind(Intent arg0){return mBinder;}

    @Override
    public void onCreate (){
      super.onCreate();
      AudioManager amanager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
      int maxVolume = amanager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
      amanager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, 0);
       mPlayer=new  MediaPlayer();
       mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
      // mPlayer = MediaPlayer.create(this, R.raw.jingle);
       mPlayer.setOnErrorListener(this);

       if(mPlayer!= null)
        {
            mPlayer.setLooping(true);
            //mPlayer.setVolume(100,100);
        }


      /*  mPlayer.setOnErrorListener(new OnErrorListener() {

      public boolean onError(MediaPlayer mp, int what, int
          extra){

            onError(mPlayer, what, extra);
            return true;
        }
          });*/
    }

    @Override
    public int onStartCommand (Intent intent, int flags, int startId)
    {

        if(intent.getExtras()!=null){
      path =intent.getExtras().getString("path");

        }
        Context c = getApplicationContext();


        if (intent != null) {
            String action = intent.getAction(); 
            if(action!=null){
           // if (!TextUtils.isEmpty(action)) {
                if (action.equals(ACTION_STOP)) {
                    pauseMusic(path);
                    }}
            }
                //}
       /// path = intent.getStringExtra(EXTRA_FILENAME);
     if (path == null) {
            Log.w("logtag", "PlayService::onStart recording == null, returning");
            //return;
        }

        Log.i("", "PlayService will play " + path);
        try {
            if(mPlayer!=null){
            mPlayer.reset();
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mPlayer.setDataSource(path);
            mPlayer.setLooping(false);
            mPlayer.prepare();
            Log.d("logtag", "PlayService player.prepare() returned");            
            mPlayer.start();
            CustomNotification();


            isPlaying = true;
            Log.i("logtag", "player.start() returned");}
            else
            {
                 Log.i("logtag", "mediaplayer null");
            }
            //updateNotification(true);
        } catch (java.io.IOException e) {
            Log.e("", "PlayService::onStart() IOException attempting player.prepare()\n");
            Toast t = Toast.makeText(getApplicationContext(), "PlayService was unable to start playing recording: " + e, Toast.LENGTH_LONG);
            t.show();
           // return;
        } catch (java.lang.Exception e) {
            Toast t = Toast.makeText(getApplicationContext(), "MusicPlayer was unable to start playing recording: " + e, Toast.LENGTH_LONG);
            t.show();

            Log.e("", "PlayService::onStart caught unexpected exception", e);
        }

               return START_STICKY;
    }

    public void pauseMusic(String path)
    {
        if(mPlayer.isPlaying())
        {
            mPlayer.pause();
            length=mPlayer.getCurrentPosition();

        }
        else{
            mPlayer.reset();
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mPlayer.setDataSource(path);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mPlayer.setLooping(false);
            try {
                mPlayer.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Log.d("logtag", "PlayService player.prepare() returned");            
            mPlayer.start();        }
    }

    public void playNextSong(String path)
    {
            mPlayer.stop();
            mPlayer.reset();
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mPlayer.setDataSource(path);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mPlayer.setLooping(false);
            try {
                mPlayer.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Log.d("logtag", "PlayService player.prepare() returned");            
            mPlayer.start();        
    }
    public boolean isplaying(){
         if(mPlayer!= null)
            {
        return mPlayer.isPlaying();}
         return false;
    }
    public void seekto(int duration){
        if(mPlayer!= null)
        {
        mPlayer.seekTo(duration);}
    }
    public int getCurrentPosition(){
        if(mPlayer!= null)
        {
        return mPlayer.getCurrentPosition();}
        return 0;

    }
    public int getDuration(){
        if(mPlayer!= null)
        {
        return mPlayer.getDuration();}
        return 0;

    }
    public void resumeMusic()
    {
        if(mPlayer.isPlaying()==false)
        {
            mPlayer.seekTo(length);
            mPlayer.start();
        }
    }

    public void stopMusic()
    {
        mPlayer.stop();
        mPlayer.release();
        mPlayer = null;
    }

    @Override
    public void onDestroy ()
    {
        super.onDestroy();
        if(mPlayer != null)
        {
        try{
         mPlayer.stop();
         mPlayer.release();
            }finally {
                mPlayer = null;
            }
        }
    }
@Override
public void onLowMemory() {
    // TODO Auto-generated method stub
    super.onLowMemory();
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
     String message = "Sorry your system has low memory";
     Notification notification = new Notification(android.R.drawable.ic_dialog_alert, message, System.currentTimeMillis());
     notificationManager.notify(1, notification);
     stopSelf();
}

    public boolean onError(MediaPlayer mp, int what, int extra) {

        Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
        if(mPlayer != null)
        {
            try{
                mPlayer.stop();
                mPlayer.release();
            }finally {
                mPlayer = null;
            }
        }
        return false;
    }

    @Override
    public boolean onInfo(MediaPlayer arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onCompletion(MediaPlayer arg0) {
        // TODO Auto-generated method stub

    }
    public void release(){
        mPlayer.release();
    }
0 голосов
/ 17 марта 2013

для воспроизведения песни на SD-карте с использованием этого фрагмента кода:

 public void playSong(int songIndex) {
        // Play song
        try {
            mp.reset();
            mp.setDataSource(songsListingSD.get(songIndex).get("songPath"));
            mp.prepare();
            mp.start();
            // Displaying Song title
            String songTitle = songsListingSD.get(songIndex).get("songTitle");
            songTitleLabel.get().setText(songTitle);
            // Changing Button Image to pause image
            btnPlay.get().setImageResource(R.drawable.ic_media_pause);
            // set Progress bar values
            songProgressBar.get().setProgress(0);
            songProgressBar.get().setMax(100);
            // Updating progress bar
            updateProgressBar();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Более пример кода для запуска Android MediaPlayer в сервисе, вы можете сделать ссылку на этого урока.

...