2011-07-08 18 views
0

で受信されていない私は、2分ごとに通知を送信するサービスを持っている..通知はAndroidの

電話がロックされます場合は新しい通知が受信されないと、私は自分の携帯電話のロックを解除する場合にのみ、私は通知を受け取る)

それを変更する方法があるかどうか..?

答えて

2

2分ごとにいくつかのタスクを実行するのに最適なソリューションはAlarmManagerです。バッテリーを消費するため、デバイスを作業モード(たとえばmp3プレーヤーなど)にする必要がないことを除いて、ウェイクロックは使用しないでください。 LAZY TO ENYONE FOR

UPDATEあなたが最初に受信機を放送する必要AlarmManagerを使用するための手動

を読み取るため。

public class ExampleReceiver extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) 
    { 
    // this method will be called by AlarmManager. But be carefull it has timeout 
    // if your task need more time, you should run thread from there with wakelocks 
    } 
} 

次に、タスクをAlarmManagerに設定できます。

public class ExampleActivity extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    Intent intent = new Intent(this,ExampleReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+INTERVAL,pendingIntent); 
    } 
} 

この例では、INTERVALの後に1回タスクを実行します。そして、それはこの仕事のために電話を目覚めさせます。 AlarmManagerのために繰り返すタスクを設定することができます。または、受信者から新しいタスクを設定する方が良い場合があります。

+0

メディアプレイヤーを使用してデバイスをスリープモードから出させましたが、今は通知を受け取ることができますが、大きな問題は特定の時間に自動的にインテントを起動できないことです.. – Shan

+0

mediaplayerによってO_o AlarmManagerの使用例を読んだことはありますか? –

+0

ヘンリーそれはうまくいっている:)しかし、唯一の問題は、それがスリープモードであるかどうかを調べるために電話の状態をチェックするためのコードを見つける必要があるということです。 – Shan

2

電話がロックされると、デバイスはディープスリープモードになり、待機/スリープタイマー関連の遅延は処理されません。

代わりにAlarmManagerを使用して、2分ごとに通知を受けるようにしてください。 (バッテリの消耗をもたらし、推奨されない場合がありますが)か、PowerManagerのAPIを使用してあなたの目標を達成することができるかもしれない

0

をWAKEロックを保持することができる。

http://developer.android.com/reference/android/os/PowerManager.html

あなたが目を覚ますためにこれを使用することができますあなたの通知を処理するために簡単に電話をかける。ただし、PowerManager APIの仕組みに精通していることを確認してください。バッテリーを消耗させるような方法でコードを記述するのは簡単です。

+0

このソリューションは非常に悪いです。あなたはデバイスのバッテリーを使います。 AlarmManagerはタスクを繰り返すのに適しています –

+0

質問を再読み込みした後、私は同意します - ヘンリーの答えが良いです。あなたが最初に電話をスリープ状態にするのをやめようとしているのでない限り(これはおそらくやってはいけません)。 –

+0

事実、AlarmManagerで動作するブロードキャストレシーバーはタイムアウトしていますので、あなたのタスクに長時間を要する場合は、レシーバーからスレッドを開始し、このスレッドが起動して動作している間にWakeLockを使用する必要があります。しかし、あなただけの通知を設定する場合は必要ありません –