2012-02-16 11 views
1

テスト目的のために、私は を1分ごとに鳴らすサービスを作成しました。 (まだクライアント - サーバーインターフェイスはありません)。 の画面がオンになってもビープ音は鳴りますが、スリープ状態になるとビープ音が止まります。サービスが画面ロックで一時停止する

私は何かのためにサーバ を定期的にポーリングする必要があるアプリケーションを作っています。

これは、常に がバックグラウンドで実行され、1分ごとにサーバーをポーリングしてから、サーバーからの応答に基づいて というサービスを作成しようとしています。

私は2つのボタン、1を開始し、もう1つは にサービスを停止するテストアクティビティを持っています。そして

S_PS_PollService

という名前のサービスクラスは、[スタート活動」ボタンのsetOnClickListenerは含まれています

Thread pollServiceThread = new Thread() { 
    public void run() { 
    startService(new Intent(MM_MainMenu.this, 
    S_PS_PollService.class)); 
    } 
}; 

pollServiceThread.start(); 

「ストップ活動」ボタンは、単にあります

stopService(new Intent(MM_MainMenu.this, S_PS_PollService.class)); 

後はS_PS_PollServiceクラスからメソッドです:

public void onCreate() { 
pollSound = MediaPlayer.create(this, R.raw.chirp); 
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent myIntent = new Intent(this, S_PS_PollService.class); 
pendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 
// for wake lock 
pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag") 
// for calendar 
calendar = Calendar.getInstance(); 
} 

オンスタート:

public void onStart(Intent intent, int startId) { 
super.onStart(intent, startId); 

wl.acquire(); 

pollSound.start(); 

calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.add(Calendar.MILLISECOND, 60000); 
alarmManager.set(AlarmManager.RTC_WAKEUP, 
calendar.getTimeInMillis(), pendingIntent); 

wl.release(); 
} 

アラームがonStart()メソッドを起動するたびに、 のビープ音を鳴らし、新しいアラームを設定します。しかし、それは画面がオンの間だけ有効です。

私はhttps://github.com/commonsguy/cwac-wakefulを試してみましたが、 を取得しました。アンドロイドに比較的新しい...

私は非常に必死に助けてください:)ありがとう、ありがとう!

答えて

0

AlarmManagerを使用する必要があります。ここにはstackoverflowの投稿がたくさんあります。

0

コードで示唆されているように、デバイスのスリープに入るたびにCPUを動作させたままにしておきたい場合があります。

問題はおそらく、開始時にオーバーライドされ、ウェイクロックを解除します。サービスが終了したら、wakeLockをonDestroyでリリースしたいと思っています。

0

これは最終的に私のために働いた。 は

import com.commonsware.cwac.wakeful.WakefulIntentService; 

public class WakeService extends WakefulIntentService { 

    public WakeService(String name) { 

     super(name); 

    } 
    @Override 
    protected void doWakefulWork(Intent intent) { 
    } 
} 

は今、あなたはループを繰り返したい今までに、コードに次の行を追加するには、プロジェクト内のクラスを追加https://github.com/commonsguy/cwac-wakeful

からCWAC-WakefulIntentService.jarをダウンロードして、

をデバイスを起動します

WakefulIntentService.sendWakefulWork(this, S_WS_WakeService.class);

関連する問題