2012-06-14 5 views
1

디바이스에서 기본 미디어 플레이어를 시작하고 오디오 파일 (팟 캐스트)을 재생하는 2 개의 영역이 내 앱에 있습니다. 하나는 다운로드 후 파일 시스템에서 가져오고 다른 하나는 사이트의 파일에서 스트리밍합니다.기본 음악 플레이어를 백그라운드에서 시작할 수 있습니까?

지금 당장은 문제가 없습니다. 문제는 미디어 플레이어를 실행 한 후 내 앱을 다시 시도하거나 다시 방문하면 플레이어가 닫히고 재생이 중지됩니다.

배경이나 서비스로 시작할 수있는 방법이있어서 앱으로 돌아갈 때 음악이 플레이어에서 계속 재생됩니다. 마치 음악 플레이어에서 노래를 시작한 것처럼 작동하도록하고 싶습니다. 따라서 사용자는 장치를 정상적으로 사용할 수 있으며 재생이 계속됩니다.

다음은 스트리밍 용 뮤직 플레이어를 시작한 코드입니다.

private void playPodcast(Podcast podcast) { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.parse(podcast.getContentLink()), "audio/*"); 
    startActivity(intent); 
} 

미리 감사드립니다.


EDIT! 아래 조언을받은 후 서비스로 시작했습니다. 나는 이것을 두 가지 방법으로 시도했다.
두 가지 방법이 매니페스트 항목으로이 있습니다

<service android:name=".DefaultMusicPlayerLaunchService"> 
</service> 

첫 번째 시도가 단지 골격이었다 서비스 클래스를 만들고 위와 유사한 방법으로 그것을 실행하는 것이 었습니다.

DefaultMusicPlayerLaunchService V1 :

public class DefaultMusicPlayerLaunchService extends Service { 

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

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

playPodcast 방법 :

private void playPodcast(Podcast podcast) { 
     Intent intent = new Intent(getApplicationContext(), 
            DefaultMusicPlayerLaunchService.class); 
     intent.setDataAndType(Uri.parse(podcast.getContentLink()), "audio/*"); 
     startService(intent); 
    } 

내 생각은,이 방법은, 그것은 유사 그것이 내가 전에했던 작업이었다 방식으로 음악 플레이어를 실행 것이라고했다 화면을 벗어나지 않고 실행하십시오. LogCat에서 아무 것도 보이지 않았다. 나는 이것이 작동해야한다고 생각하지만 나는 뭔가를 놓치고있다.

내가 시도한 또 다른 방법은 팟 캐스트 객체를 추가로 직렬화하고 에 넣어서 DefaultMusicPlayerLaunchService으로 만들었습니다. 그런 다음 onStartCommand 메서드에서 객체를 잡고 Intent을 새로 만든 다음 startActivity을 원래의 playPodcast 메서드와 비슷하게 호출했습니다. 그리고 기대했던대로, 그것은 최고의 선수가하는 일을합니다 ... 선수를 발사합니다.하지만 내가 다시 또는 집에 ​​가면 즉시 닫힙니다.

나는 명백한 무엇인가 놓치고있어 사과드립니다. 나는 안드로이드에 익숙하지 않고 지금까지 작업 해 온 모든 것들이 Activity을 사용했습니다. 이것은 Service을 시작한 첫 번째 시도입니다.

답변

0

예 서비스로 시작할 수 있습니다. android.app.Service를 확장하는 클래스를 만들어야합니다. 그리고 Activity에서 startService (intent)를 호출하여 서비스를 시작할 인 텐트를 전달합니다. onStartCommand 메소드를 오버라이드 (override) 해, START_STICKY를 돌려 주어, 명시 적으로 정지 할 때까지 서비스를 실행시킵니다. 코드를 사용하거나 Android OS에서 리소스를 절약 할 수 있습니다. onBind를 오버라이드하여 서비스를 액티비티를 액티비티에 바인딩 할 수 있습니다.이 서비스는 전경 액티비티와 동일한 중요성을 가지므로 안드로이드가 리소스를 절약하기 위해 서비스를 죽일 가능성이 줄어 듭니다.

+0

입력 해 주셔서 감사합니다. 죄송합니다. 이걸 시도하는 데 너무 오래 걸렸습니다. 이 일을 제대로하고 있는지 확실하지 않습니다. 나는 그것을 두 가지 방법으로 시도했지만 둘 다 작동하지 않습니다. 나는 더 많은 정보로 메인 주제를 갱신 할 것이다. – Shino

관련 문제