0

ステータスバーに通知を表示するコードがあります。再度電話することで更新できることはわかっていますがsetLatestEventInfo()、30 分ごとに更新を行いたいと考えています。
時間を追跡するにはどうすればよいですか?誰かがそのための機能を知っていますか?
30分ごとにインクリメントし続けるカウンターを使用することも考えましたが、時間を取得するのは問題です。

String ns = Context.NOTIFICATION_SERVICE;

NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

int icon = R.drawable.index1;
CharSequence tickerText = "Hello";

long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence notificationTitle = "My notification";
CharSequence notificationText = "Hello World!";

Intent notificationIntent = new Intent(this, NotificationAppActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, notificationTitle, notificationText, contentIntent);

final int HELLO_ID = 1;

mNotificationManager.notify(HELLO_ID, notification);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
}
4

2 に答える 2

2

AlarmManagerを使用して、30 分ごとに定期的なイベントをスケジュールする必要があります。次に、このイベントを処理し、ブロードキャストレシーバーでonReceive()通知を更新する必要がありますが、通常はIntentサービスに送信してジョブを実行します。

コード例:

Intent intent = new Intent(this, MyAlarmBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
long recurring = (30 * 60000);  // in milliseconds
am.setRepeating(AlarmManager.RTC, Calendar.getInstance().getTimeInMillis(), recurring, sender);

そして、あなたはのコードでMyAlarmBroadcastReceiver規則的です。私は 1 つのブロードキャスト レシーバーを使用することを好むので、インテントに追加データを追加して、ブロードキャスト レシーバーが何をすべきかを認識できるようにしますが、必要に応じて分離することもできます。BroadcastReceiveronReceive()

public class MyBroadcastReceiver extends BroadcastReceiver {
   @Override
   public void onReceive( Context context, Intent intent ) {

     // ... do what you need to do here...

   }
}
于 2012-09-27T17:38:40.703 に答える
0

次の例のように、alarmManager を使用します。

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
于 2012-09-27T18:11:02.607 に答える