2013-12-10 1 views
-1

백그라운드에서 음악을 재생하는 미디어 플레이어 서비스가 있으며이 서비스는 활동에서 호출됩니다. 이제 내가 전.서비스에서 mediaplayer 서비스 화면 가져 오기

public class MediaPlayerService extends Service implements 
    OnCompletionListener, OnClickListener { 
    MediaPlayer mediaPlayer; 
    String url; 
    int mediaPos, mediaMax, position; 
    boolean isShufle; 
    WeakReference<SeekBar> seekbar; 
    WeakReference<TextView> reciter, songTitle, songPos; 
    private WeakReference<ImageView> play, forward, backward; 
    ArrayList<Songs> songs; 
    Handler handler; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // mediaPlayer = MediaPlayer.create(this,url);// raw/s.mp3 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    } 

    private void play(final int position) throws IllegalArgumentException, 
      SecurityException, IllegalStateException, IOException { 
     /* 
     * dialog = ProgressDialog.show(AlbumDetails.this, "", 
     * getString(com.darkovski.quran.R.string.buffering), true); 
     * dialog.setCancelable(true); dialog.show(); 
     */ 

     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer.setDataSource(songs.get(position).getLink()); 

     // prepare track 
     mediaPlayer.prepare(); 
     mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       play.get().setImageResource(R.drawable.pause); 
       // play.setImageResource(R.drawable.pause); 

       // this is new 

       mediaPos = mp.getCurrentPosition(); 
       mediaMax = mp.getDuration(); 
       reciter.get().setText(songs.get(position).getRecitorName()); 
       songTitle.get().setText(songs.get(position).getTitle()); 
       songPos.get().setText((position + 1) + " of 114"); 
       seekbar.get().setMax(mediaMax); 
       seekbar.get().setProgress(mediaPos); 

       handler.removeCallbacks(moveSeekBarThread); 
       handler.postDelayed(moveSeekBarThread, 100); 
       mp.start(); 
       // dialog.dismiss(); 
      } 
     }); 
     // when truck finishes 
     mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       // if(shuffle) 
       try { 
        if (isShufle) { 
         play(new Random().nextInt(songs.size())); 

        } else { 
         if (position == songs.size()) 
          play(0); 
         else 
          play(position + 1); 
        } 
        AlbumDetails.position += 1; 
       } 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(); 
       } 
      } 
     }); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     url = intent.getStringExtra("url"); 
     handler = new Handler(); 
     position = intent.getIntExtra("position", -1); 
     forward = new WeakReference<ImageView>(AlbumDetails.forward); 
     backward = new WeakReference<ImageView>(AlbumDetails.backward); 
     play = new WeakReference<ImageView>(AlbumDetails.play); 
     play.get().setOnClickListener(this); 
     forward.get().setOnClickListener(this); 
     backward.get().setOnClickListener(this); 
     seekbar = new WeakReference<SeekBar>(AlbumDetails.seekbar); 
     reciter = new WeakReference<TextView>(AlbumDetails.reciter); 
     songTitle = new WeakReference<TextView>(AlbumDetails.songTitle); 
     songPos = new WeakReference<TextView>(AlbumDetails.songPos); 
     songs = AlbumDetails.songs; 

     seekbar.get().setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
        boolean fromUser) { 
       if (fromUser && mediaPlayer.isPlaying()) { 
        mediaPlayer.seekTo(progress); 
       } 
      } 
     }); 
     /* 
     * try { mediaPlayer.setDataSource(url); mediaPlayer.prepare(); 
     * mediaPlayer.setOnCompletionListener(this); } 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(); } if (!mediaPlayer.isPlaying()) { 
     * mediaPlayer.start(); } 
     */ 

     try { 
      play(position); 
     } 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(); 
     } 

     return START_STICKY; 
    } 

    public void onDestroy() { 
     if (mediaPlayer.isPlaying()) { 
      mediaPlayer.stop(); 
     } 
     mediaPlayer.release(); 
    } 

    public void onCompletion(MediaPlayer _mediaPlayer) { 
     stopSelf(); 
    } 


    private Runnable moveSeekBarThread = new Runnable() { 

     public void run() { 
      if (mediaPlayer.isPlaying()) { 
       int mediaPos_new = mediaPlayer.getCurrentPosition(); 
       int mediaMax_new = mediaPlayer.getDuration(); 
       seekbar.get().setMax(mediaMax_new); 
       seekbar.get().setProgress(mediaPos_new); 
       handler.postDelayed(this, 100); 
      } 

     } 
    }; 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.playeer_back: 
      try { 
       if (mediaPlayer != null) 
        if (mediaPlayer.isPlaying()) { 
         mediaPlayer.stop(); 
         mediaPlayer.release(); 
        } 
       if (position - 1 < 0) { 
        play(songs.size()); 
        position = songs.size(); 
       } else 
        play(position - 1); 
      } catch (IllegalArgumentException e2) { 
       // TODO Auto-generated catch block 
       e2.printStackTrace(); 
      } catch (SecurityException e2) { 
       // TODO Auto-generated catch block 
       e2.printStackTrace(); 
      } catch (IllegalStateException e2) { 
       // TODO Auto-generated catch block 
       e2.printStackTrace(); 
      } catch (IOException e2) { 
       // TODO Auto-generated catch block 
       e2.printStackTrace(); 
      } 
      break; 
     case R.id.playeer_forward: 
      try { 
       if (mediaPlayer != null) 
        if (mediaPlayer.isPlaying()) { 
         mediaPlayer.stop(); 
         mediaPlayer.release(); 
        } 
       play(position + 1); 
       position += 1; 
      } 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(); 
      } 
      break; 
     case R.id.playeer_play: 
      if (mediaPlayer == null) { 
       try { 
        play(position); 
       } catch (IllegalArgumentException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } catch (SecurityException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } catch (IllegalStateException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } catch (IOException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
      } else if (mediaPlayer.isPlaying()) { 
       mediaPlayer.pause(); 
       play.get().setImageResource(R.drawable.pause); 
      } else if (mediaPlayer != null) { 
       mediaPlayer.start(); 
       play.get().setImageResource(R.drawable.play_play); 
      } 
      // playFunction(); 
      break; 
     } 
    } 

} 

그리고 내 활동 코드 : 그 활동을 종료하고 다시 그것을 얻을, 나는 어떤 노래가 재생되는 상태 등이 여기에

내 서비스에서 코드입니다 무엇인지보고 싶어 - onClick :

case R.id.playeer_play: 
      playbackServiceIntent 
      .putExtra("url", songs.get(position).getLink()); 
      playbackServiceIntent 
      .putExtra("position", position); 
      startService(playbackServiceIntent); 
         break; 
+0

무엇이 질문입니까? – CommonsWare

+0

@CommonsWare 죄송합니다. 불명확하면 서비스를 통해 노래를 재생합니다. 지금 전. 내가 그 활동에서 벗어나서 검색 바에서 돌아올 때, 위치, 노래 이름 등 정보가 손실됩니다. 어떻게 든 플레이어 화면으로 돌아 가면 모든 데이터가 거기에 있도록 참조해야합니다. –

+0

저의 요점은 질문이 아닙니다. 암묵적인 질문은 "어떻게합니까?", 무엇을 시도 했습니까? 그리고 어떤 특정 문제가 발생 했습니까? – CommonsWare

답변

1

실현 방법은 다양합니다. 서비스, ​​즉, 곡명, 길이의 상태를 추적하기 위해 응용 프로그램을 사용 LocalBroadcastManager

  • 를 사용

    1. ...
    2. 사용 된 SharedPreferences

    IMHO, 나는 LocalBroadcastManager를 사용하여 생각 더 청소기.
    - 서비스에 브로드 캐스트 메시지 보내기
    - 서비스가 메시지를 받으면 상태를 브로드 캐스트합니다.

  • 관련 문제