2012-02-11 4 views
1

기본 라디오 플레이어를 만들었습니다. 코드를 재생하게 만드는 코드는 setWakeMode 메서드를 제외하고는 완벽하게 작동합니다. 휴대 전화를 대기 모드로 전환하면 오디오가 최대 2 분 동안 잘 재생 된 후 정지되고 시작됩니다. 어떤 아이디어?Android MediaPlayer WakeLock이 작동하지 않음

N.B. radioPlayer는 MediaPlayer의 인스턴스입니다.

public boolean startRadio() 
{ 
    try 
    { 
     String url = getString(R.string.radioURL); // Radio url. 
     radioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     radioPlayer.setDataSource(url); 
     radioPlayer.prepare(); // might take long! (for buffering, etc) 

     radioPlayer.setWakeMode(this.getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 
     radioPlayer.start(); 
     return true; 
    } 
    catch(Exception e) 
    { 
     showAlert(getString(R.string.error), getString(R.string.radioError)); 
     radioPlayer.release(); 
     radioPlayer = new MediaPlayer(); 
     return false; 
    } 
} 

업데이트 : 다른 곳에서 다른 스레드를 검토 한 결과,이 문제는 HTC 휴대폰에 고유 한 것 같다 발견 한 사실, 내 삼성 갤럭시 탭은 모든 심지어 웨이크 잠금없이 살아. 어떤 아이디어?

답변

1

안드로이드 개발자 구글 + 페이지를 다시 게시 [이

작은 팁 : 사용자가 (게임을하거나 동영상을보고 예를 들어) 앱에있는 동안에 화면을 유지하려는 경우, 가장 좋은

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON

http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

http://developer.android.com/reference/android/media/MediaPlayer.html#setScreenOnWhilePlaying(boolean)

:이 작업을 수행하는 방법은 다음 중 하나입니다

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html을 사용하지 않는 한 WAKE_LOCK 권한을 요청해야하므로 (사용자에게 앱에 대한 권한을 한 가지 더 남겨두고 표시하므로 앱을 설치할 가능성이 적음). 또한 이전 API 중 하나를 사용하면 시스템이 사용자를 위해 잠자기 잠금을 관리 할 수 ​​있으므로 사용자가 앱을 나가고 화면이 계속 켜져있는 곳에서는 버그를 가질 수 없습니다.

+0

이 앱으로 라디오를 듣는 사람들이 휴대 전화를 대기 상태로 두거나 원하는 경우 주머니에서 휴대 할 수 있기를 바랄뿐입니다. 배터리 때문에 화면을 계속 켜 놓는 것은 실제로 옵션이 아닙니다. WAKE_LOCK 권한을 이미 추가했습니다. 당신의 공헌에 감사드립니다. – apbarratt

+0

keepScreenOn은 미디어 플레이어가 계속 놀고 싶어한다면 칼날 싸움에 로켓 발사기를 가져오고 있습니다.:) – REJH

-1

세트 keepScreenOn = 사실

가장 쉬운 것. 보기 중 하나에

*, keepScreenOn라는 속성을 찾아 * 사실을 설정합니다. 그것 뿐이다

. 그것은 매력처럼 작동합니다 :

+3

keepScreenOn은 미디어 플레이어가 계속 경기하기를 원한다면 로켓 발사기를 칼 싸움으로 데려오고 있습니다. – REJH

+0

@REJH 대체 솔루션은 무엇입니까? keepScreenOn은 (안드로이드 팀에서) 화면을 켜기위한 wakelocks와 비교할 때 좋습니다. –

+0

질문은 그가 화면을 켜 놓고 싶다고 말하지 않습니다. 그는 wifi가 깨어 있기를 원합니다. (그가 명시 적으로 말하면서 그의 코멘트를 보라 : "나는이 앱으로 라디오를 듣는 사람들이 전화기를 대기 상태로 둘 것을 원한다."). 일반적으로 음악 재생을 위해 화면을 켜 놓는 것은 좋지 않습니다. 동영상 스트림이라면 솔루션에 동의 할 것입니다. – REJH

5

Wifi가 절전 모드로 들어가기 때문에 MediaPlayer가 중지되므로 WifiLock을 사용하여 시도해보십시오.

+0

오우 와우 저는 mediaplayer.setwakemode가 Wi-Fi를 계속 유지할 것이라고 전적으로 추측했지만 필요하지 않다는 것을 잊었습니다. 그것이 스트림을 재생하지 않으면 - 아마도 많이 발생합니다. – REJH

-1

먼저 prepare() 대신 prepareAsync()를 사용해야합니다. 버퍼링이 약간 시간이 걸릴 수 있으므로이 메서드를 사용하면 전체 스레드가 분리 된 스레드에서 완료됩니다. 일부 수신기를 추가 할 수도 있습니다 그 코드와 방법 구성에 도움이 될 것입니다.).

+0

주의 깊게 읽으십시오 – dragonfly