2013-01-04 3 views
11

Android가 처음입니다. 응용 프로그램을 닫더라도 노래를 계속 재생할 수 있도록 Media Player 용 서비스를 만들고 있습니다. Media Player에 대한 활동을 만들었으며 재생, 일시 중지, 다음, 이전, 검색 표시 등의 모든 기능을 갖추고 있으며 oncompletionlistener도 포함합니다. 모든 작품이 우수합니다. 하지만 이제는 모든 것을 서비스로 관리해야합니다.MediaPlayer 서비스 Android

내가 만든이면 MyService 클래스 :

public class MyService extends Service { 

    public static MediaPlayer mp; 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     mp = new MediaPlayer();  
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

하지만 난 currentsongIndex을 복용하고있는는 songList에 대한 ArrayList를 생성하고 그것을 통해 내가 다음, 이전의 모든 같은 모든 기능을 유지하고 내 선수 활동

. . 서비스 중인데 어떻게 내 활동에 꼭 필요한 노래 목록을 얻나요 ?? MediaPlayer 객체는 서비스 나 활동에서 어디에서 만들어야합니까 ??

for MediaPlayer 나는 http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/을 언급했다. 내 미디어 플레이어 코드는이 사이트를 참조 할 수 있습니다. 감사. 나는 의심 할 여지가 없다. 나 진짜 혼란 스럽다. 곧 대답 해주세요.

+0

서비스 중인지 확인하십시오. 그것이 노래 목록이 필요한 수업입니다. –

+0

서비스중인 노래 목록을 만들어야합니다. 그러나 활동에서 다음 버튼을 클릭하면 서비스가 어떻게 처리 될까요? – zanky

+0

도 활동 코드를 게시 할 수 있습니까? 또한, 귀하의 요구 사항을 올바르게 파악하고 있는지 확신 할 수 없습니다. 노래에 대한 별도의 클래스를 만든 다음 필요할 때마다 개체를 사용하여 호출 할 수도 있습니다. –

답변

7

올바른 길을 가고 있습니다. SDK 샘플에서 수정했습니다. 이게 내가하는 일이고 멋지다. 당신은 추가해야합니다 매니페스트에서

startService(new Intent(MusicService.ACTION_PLAY)); 

:

onListItemClick 

를 호출하고 음악 서비스를 시작하는 의도를 시작 (서비스에서 활동하지에서) 당신의 ArrayList에서

<intent-filter> 
      <action android:name="com.blah.blah.action.PLAY" /> 
      <xxx xxx> 
</intent-filter> 

귀하의 음악 서비스에서 귀하는 의도를 받아야합니다 :

public int onStartCommand(Intent intent, int flags, int startId) { 
    String action = intent.getAction(); 
    if (action.equals(ACTION_PLAY)) 
     processPlayRequest(); 
    } 

스킵, 되감기, 정지 등을 위해 인 텐트를 추가하십시오. 도움이되는지 알려주십시오.

+0

예 .. 나는 이것을 원한다. 하지만 내가 재생할 때 버튼 소스 이미지를 변경하고 싶을 때와 같은 버튼에서 일시 중지 할 때 내 서비스에서 활동 버튼에 액세스 할 수 있습니다. 네 생각 ?? – zanky

+0

아마도 액티비티 내에서 처리해야하지만,'public static Button myButton;처럼 버튼을 초기화 할 수 있습니다. 그러면 어디에서든지 이미지를 바꿀 수 있습니다.하지만 이렇게하는 것이 좋습니다 ... 오히려 'onClick' 이벤트 내에서 음악 서비스가 음악 재생을 처리하도록합니다. 위의 내 대답에 만족하면 받아 들인 것으로 표시하십시오. –

1

앱을 백그라운드에서 실행시키는 것은 '서비스'자체에서 처리해야합니다.
이 예제를 따르십시오. http://www.vogella.com/articles/AndroidServices/article.html
서비스는 백그라운드에서 작동하도록 설계되었습니다.

+0

오크 고맙습니다 내 문제에 대한 시간을 보내고 .. – zanky

+1

. 튜토리얼을 참조하는 중에도 코드 하나를 고수하지 마십시오. 액티비티의 기본 레이아웃 (버튼 및 일부 기능 등)을 작성하기 만하면됩니다. 일부 버튼의 'onclick'에서 서비스를 시작하고 백그라운드에서 서비스를 실행할 수 있습니다. 미디어 플 레이어/노래가 서비스 클래스에 포함됩니다. –

0

나는 똑같은 일을 겪었습니다! 정말로 훌륭한 mp3 플레이어 앱을 개발하는 것은 장거리입니다. 대답은 길다.

다음은 실제로 나를 도울 수있는 몇 가지 자료입니다. 이 바인딩 서비스 포 그라운드에서 실행하는 방법에 대한이 긴 문서의 하단 말씀에

http://developer.android.com/guide/components/services.html

에주의 : 안드로이드는 개발자 문서에 바로이 일에 대한 기사가있다.

또한 플레이어 상태를 관리하면 가장 골치 아픈 원인이되었습니다.

또한 새로운 서비스가 메인 UI 스레드의 모든 것을 실행하기 때문에 스레드가 있는지 살펴볼 필요가 있습니다. 스레드 풀을 관리하기위한 ExecutorService를 살펴보십시오. 나는 그것이 더 쉽다는 것을 말할 수 있었으면 좋겠다.

불행하게도 웹을 통해하지만 유료 사이트에서 제공 안드로이드 서비스 모두에서 내 정식 교육의 대부분 :

http://www.pluralsight.com/training/Courses/TableOfContents/android-services

그것은 내가 생각하는 모든 프로그래머를위한 좋은 자원이다 그러나 많은에 대한 좋은 섹션이 있습니다 안드로이드 프로그래밍의 측면은 다른 튜토리얼 사이트에서 간략하게 다루고 있습니다.

Vogella의 자료는 위에서도 언급 한 내용이 유용합니다.