2012-02-11 2 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; 
    } 
} 

UPDATE:別の場所で別のスレッドを確認した後、私はこの問題はHTCの携帯電話に一意であるように思われることを発見しましたが、実際には、私のサムスンギャラクシータブでも、すべてのウェイクロックせずに生き残っています。何か案は?

答えて

1

のAndroidデベロッパーグーグル+ページの再投稿[この

小ヒント:あなたは、ユーザーが自分のアプリにあるときに、画面を維持したい場合(例えば、ゲームをプレイしたりビデオを見て)、最高

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

:これを行う方法は、これらのいずれかでありますあなたがする必要がある場合を除き、これはあなたがWAKE_LOCK権限(あなたのアプリをインストールしにくく、それらを残して、ユーザーに示すように1以上のアクセス許可)を要求する必要があるため

は、http://developer.android.com/reference/android/os/PowerManager.WakeLock.htmlを使用しないでください。また、以前のAPIのいずれかを使用すると、システムが目覚ましロックを管理することができるため、ユーザーがあなたのアプリを離れる場所にバグを残すことはできず、画面は引き続き保持されます。

+0

、彼らがそう望む、あるいは単に一般的に自分を下に実行し、画面なしで聴けば事は、私はこのアプリでラジオを聞く人が待機中で自分の携帯電話を入れて、自分のポケットにそれを歩き回ることができるようにしたいですよさバッテリーが残っているため、スクリーンをオンにしておくことは本当にオプションではありません。 はすでにWAKE_LOCK権限を追加しました。あなたが唯一のメディアプレーヤで再生を維持したい場合は、あなたの貢献に感謝:) – apbarratt

+0

keepScreenOnはナイフの戦いにrocketlauncherをもたらしています。:) – REJH

-1

セットkeepScreenOn =真

最も簡単なもの。ビューのいずれかに

*、keepScreenOnと呼ばれるプロパティを見つけ、* 真を設定します。

これはそれです。無線LANがスリープモードに入るので、あなたはそれを防ぐためにWifiLockを使用してみてくださいので、それは魅力:)

+3

keepScreenOnは、メディアプレイヤーの再生を継続したい場合は、ナイフ戦闘にロケットランチャーを持ってきています。 – REJH

+0

@REJHお勧めの代替ソリューションは何ですか? keepScreenOnは、画面をオンにしておくウォークロックと比較して(アンドロイドチームによって)推奨されます。 –

+0

質問は彼が画面をオンにしたいと言っているわけではありません。彼はwifiが起きていることを望んでいる。 (彼が明示的に言うところの彼のコメントを参照してください: "これは、私はこのアプリでラジオを聞いている人々が自分の携帯電話をスタンバイに置くことができるようにしたい")。一般に、音楽再生のために画面をオンにすることは悪い考えです。それがビデオストリームの場合、私はあなたのソリューションに同意します。 – REJH

5

あなたのMediaPlayerの停止のように動作します。

+0

ああ、私はmediaplayer.setwakemodeもWi-Fiを続けると思っていましたが、それは必要ないと忘れましたそれはストリームを再生しない場合 - おそらく多く発生します。 – REJH

-1

まずprepare()の代わりにprepareAsync()を使用してください。バッファリングには少し時間がかかる可能性があります。このメソッドを使用すると、作業全体が分離されたスレッドで処理されます... リスナーを追加することもできますあなたのコードとメソッドの整理には必ず役立つでしょう)。

+0

慎重に質問をお読みください – dragonfly

関連する問題