마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 백그라운드에서 인터넷 돌게하는것

0 추천
안녕하세요 개발 뉴비입니다.

제가 구현하고싶은 기능이있는데 도움 부탁드립니다.


마치 멜론앱은 다른액티비티가 컨트롤을가진상황이나

심지어 폰을 잠금해도 실행되듯이,

제가만든앱이 백그라운드에서 돌게끔하고싶습니다!!!

키워드나 좋은조언 부탁드립니다!!!
익명사용자 님이 2017년 7월 7일 질문

1개의 답변

+1 추천
Foreground Service를 만들어서, 부팅시에 구동시키게 만들어 줍니다. Foreground Service는 유저가 일반적으로 죽일 수 없습니다. 세팅화면에서 강제로 죽이거나, 앱을 삭제해야 되지요.

Foreground서비스에서 특정 상황에서 앱의 특정 화면을 띄워주거나 하면 됩니다.
Will Kim (43,170 포인트) 님이 2017년 7월 7일 답변
그렇다면! 멜론같은 스트리밍 음원들은 설치할경우 자동으로
Service가 포함된 프로그램이 핸드폰에 깔리게되는건가요???
먼저 뮤직플레이어를 만들어 보았지만, 기본 뮤직 플레이어처럼 완벽하게 동작하게 만들지는 않았습니다. 고객 요구사항이 거기까지는 없었죠.

일단, 질문을 먼저 확인하죠.
멜론앱이 정확하게 어떤 상황에서 실행된다는 건가요?
예를들면, 실행되지 않았거나 백그라운드로 내려갔는데도 계속 플레이가 된다는 건가요? 아니면, 이어셋에서 플레이버튼을 눌렀을 때 기본 뮤직 앱처럼 플레이가 된다는 건가요?

첫번째는 백그라운드로 내려가도 음악이 플레이되는 건은 아마도, 안드로이드의 뮤직 플레이어 라이브러리가 음악을 플레이 하는 경우에 백그라운드에서 수행되게 만들기 때문일 겁니다.

두번째, 뮤직플레이어가 이어셋 버튼 이벤트를 받았을 때 동작하는 것은 "리시버"를 만들어서 Receiver가 이어셋 버튼 이벤트를 받아서 해당하는 기능에 적절한 화면을 띄워 주거나 서비스스와 통신하여 뮤직플레이를 합니다. 요즘에는 기본 뮤직앱도 앱을 실행시키지 않고 Notification 바(위에서 끌어내리는), 잠금 화면에만 UI를 띄우죠. 이런 경우는 앱의 Activity를 띄우지 않고, "서비스"에서 해당 기능을 수행하는 것입니다.

리시버의 구성의 예:
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver" >
   <intent-filter>
     <action android:name="android.intent.action.MEDIA_BUTTON" />
   </intent-filter>
 </receiver>
 
관련 정보: https://developer.android.com/reference/android/support/v4/media/session/MediaButtonReceiver.html

마지막으로 "서비스"를 만들경우, 사용자가 Notification 바를 끌어 내려서 앱을 종료하면 "서비스"도 종료 됩니다. 그렇게 하지 않으려면 "Foreground Service"를 만들어서 별도의 Process로 동작하게 해야 합니다. 이 경우에 Foreground Service와 Main App의 프로세스가 달라서 SharedPreference를 공유하지 못합니다. 이 경우에는 통신을 통해서 중요메시지를 전달합니다. (Broadcast Receiver) 혹은 멀티 프로세스간 공유되는 SharedPreference Library (Open Source) 를 사용하기도 합니다.

뮤직앱은 제가 보기에 통신할게 많지는 않아 보이니, Broadcast Receiver로 해도 충분할 것 같네요.

제글에 잘못된 부분은 언제든지 지적해 주세요.
일단 친절한답변 너무너무 감사드립니다.
제가 멜론앱에서 말하는 특이한 경우의 실행은,
(1)컨트롤이 다른앱으로 옮겨가 멜론앱이 뒤로묻혀있는데에도 음악이 계속재생되는점
(2)잠금화면으로 꺼놔도 음악이 계속 재생된다는점. (이건 말씀하신것과 비슷하지만 조~금다른것같습니다.)

음.. 솔직히 지금 제실력으로는 지금말씀하신부분을 많이 못알아듣고있습니다. ㅠㅠ 말씀해주신 부분들을 하나하나 검색해가면서 천천히 찾아보겠습니다. 제가 이해한대로면 위에 말씀하신 것이
(1)번경우는 안드로이드의 뮤직플레이어 라이브러리를 제가 만든 앱에서 사용할 수 있게끔 하면되는것.
제가쓴 (2)번경우는 앱이 잠금화면으로 들어가면 service를 시작시켜서 하던일을 계속 이어나가면 된다는것.

제가 이해한것이 맞는지 말씀해주시고 참고할만한 키워드나 글이 있으면 알려주시면 감사하겠습니다.
다시한번 친절한 답변 너무너무 감사드립니다!
...