2016-12-01 7 views
2

ここにoncreateメソッド内のアプリケーションクラスのコードですが、私のアプリケーションからのメッセージは表示されません。誰も私にこれを手伝ってもらえますか?メッセージを表示するために5秒ごとに繰り返しアラームを設定する方法

Intent alarmIntent = new Intent(this, AlarmReceiver.class); 
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 
public void startAlarm() { 
    manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    int interval = 5000; 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
} 

And on the broadcast receiver class I have the following code 

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context arg0, Intent arg1) { 
    // For our recurring task, we'll just display a message 
    Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show(); 

} 

}

答えて

0

編集答え

利用setInexactRepeating()の代わりsetRepeating()setRepeatingは、INTERVAL_FIFTEEN_MINUTESの中で最も短い間隔でしか設定されません。あなたのケースでは、1000ミリ秒、5000ミリ秒という短い周期を設定する唯一の方法はsetInexactRepeating()です。

変更:

manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
+0

@ Nick Friskel、ありがとうございます。しかし、私はAlarmMangerを宣言しましたが、私はそれを含めませんでした。私の質問は、サービスクラスを使用せずにlogcatで5秒ごとにメッセージを取得するAlarmManagerを使用しています。私はタイマーとハンドラでそれをやったが、効率的ではなかった。 – Hiwot

+0

私は答えを編集しました:) –

+0

あなたは私に言いましたが、何も変わりません:( – Hiwot

0

manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 

あなたが必要な正確な5秒の遅延を取得していない場合、あなたはハンドラを使用する必要があります。 Androidの5.xでは基本的にすべての繰り返しアラームがバッテリ寿命を節約するために不正確であるため、5秒の遅延を伴うあらゆる種類のアラームは正常に動作しません。

私はハンドラを使用するようにコードを変更した:

startAlarmを();

public void startAlarm() { 
    final Handler h = new Handler(); 
    final int delay = 5000; //milliseconds 

    h.postDelayed(new Runnable(){ 
     public void run(){ 
      //do something 

      Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class); 
      sendBroadcast(alarmIntent); 

      h.postDelayed(this, delay); 
     } 
    }, delay); 
} 

このアラーム方法は、現在のBroadcastReceiverで動作し、実際の遅延時間は5秒です。

関連する問題