2011-01-17 9 views
1

私には、10分が経過した10分ごとにユーザーに知らせるためにテキストからスピーチを使用するアプリがあります。それは現在正常に動作しますが、電話を切った場合(電源ボタンを押しても)、サウンドは再生されません。電話が眠っているときのテキストから音声へ - Android

携帯電話がスリープ状態でも、これらのサウンドを再生するにはどうすればよいですか?

+1

声を出して答えとして入れないように考えていますが、サービスを利用すればそれは効きませんか? – C0deAttack

+0

おそらく、私はそれを検討していないかもしれません。それが簡単にできるかどうか疑問に思うだけです。 – CeejeeB

+1

それは難しいと思わないでください。携帯電話が眠っている間に多くのサービスが実行され、音楽プレーヤーなどがサウンドを再生します。 – C0deAttack

答えて

4

一般に、魔法使いがスリープ状態になると、あなたのコードは実行されません。コードを実行するにはをPowerManagerから取得する必要があります。しかし、あなたの場合、WakeLockを常に取得する必要はありません。あなたは10分ごとにあなたの目を覚ます必要があります。さもなければあなたのアプリは何もしない電池を食べるだけです。

定期的にアプリケーションをスリープ状態にするには、特別なAndroidのAlarmManagerを使用する必要があります。ここで

は一例である:(あなたが活動を使用しない場合)

Intent myIntent = new Intent(getApplicationContext(), YourActivity.class);  
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, interval, pendingIntent); 

また、あなたはサービスで処理するブロードキャストを送信することができます。

EDIT:明示的にSCREEN_DIM_WAKE_LOCKを作成しない限り、再生は開始されません。 PARTIAL_WAKE_LOCKは再生では機能しません(今はなぜか、おそらくバグです)。

PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); 
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Music"); 
wakeLock.acquire(); 
...start playback... 
wakeLock.release(); 

EDIT:追加されたプロジェクト60秒ごと(画面がオフになっているUSBケーブルが切断された場合であっても)再生を実行する例を示しています。 http://code.google.com/p/playevery60/

+1

オーディオを再生するだけのことをしているので、眠っているときに自分のコードが実行されています。しかし、これは電話機を目覚めさせる興味深い概念です。 – CeejeeB

+0

コードが実行されていることをどのように知っていますか?どのように正確にこれを伝えることができますか?携帯電話をUSB経由でコンピュータに接続すると、画面がオフになってもスリープモードにはなりません。 – inazaruk

+0

gps co-ordsに基づく計算も行っているので、毎秒実行する必要があります。私はコンピュータに接続されていない電話機でこれをテストしました。計算は正しいです。つまり、眠っている間は実行していなければなりません。 – CeejeeB

関連する問題