[解決済み] 営業日のアラームを設定する方法
質問
あるシナリオがあります。
月~金)のアラームを設定する
という時間を選ぶとします。
hour = 9, minutes = 15, am_pm = "AM"
.
今度は、すべての
Monday to Friday at 9:15 AM
以下のコードを試してみましたが、望ましい結果が得られません。
if(choice.equals("Week Days (Mon-Fri)"))
{
for(int a = 2; a <= 5; a++) //here I am assuming a is from 2 to 5 (calendar DAY_OF_WEEK from Monday to Friday)
{
Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.set(Calendar.HOUR_OF_DAY, _hourOfDay);
alarmCalendar.set(Calendar.MINUTE, _minute);
alarmCalendar.set(Calendar.SECOND, 0);
alarmCalendar.set(Calendar.MILLISECOND, 0);
if(am_pm.equals("AM"))
{
alarmCalendar.set(Calendar.AM_PM, 0);
}
else
{
alarmCalendar.set(Calendar.AM_PM, 1);
}
alarmCalendar.set(Calendar.DAY_OF_WEEK, a);
Long alarmTime = alarmCalendar.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
alarmTime, 24 * 60 * 60 * 1000 , pendingIntent);
}
Toast.makeText(ActivityReminder.this, "Meeting Reminder Set on Week Days (Mon-Fri)",
Toast.LENGTH_LONG).show();
}
私は
BroadcastReceiver
のようなものです。
public class AlarmReceiver extends BroadcastReceiver
{
NotificationManager mNotificationManager;
Context context;
public static final String TAG = "Reminder...";
@Override
public void onReceive(Context context, Intent intent)
{
this.context = context;
String subject = "<h3>Meeting Reminder: </h3>" + intent.getStringExtra("subject");
Toast.makeText(context, Html.fromHtml(subject), Toast.LENGTH_LONG).show();
showNotification(subject);
}
@SuppressWarnings("deprecation")
private void showNotification(String msg)
{
Intent notificationIntent = new Intent(context.getApplicationContext(),
ActivityMainScreen.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(ActivityMainGeofence.class);
stackBuilder.addNextIntent(notificationIntent);
String arrivalTime = TimeUtil.toString(Calendar.getInstance().getTime(),
"dd-MM-yyyy hh:mm:ss a");
notificationIntent.putExtra("subject", msg)
.putExtra("time", arrivalTime).putExtra("type", "Meetings/Reminder");
PendingIntent notificationPendingIntent = stackBuilder
.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification();
notification.icon = R.drawable.app_icon;
notification.setLatestEventInfo(context.getApplicationContext(),
"WFM Meeting Reminder", Html.fromHtml(msg), notificationPendingIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
NotificationManager mNotificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, notification);
}
}
最後にManifestで。
<receiver android:name="com.my_package_name.AlarmReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
を編集しました。
ここでは、以下のことを伝えたいと思います。
One Time
アラームが作動しましたが、上記の選択肢では
Week Days (Mon-Fri)
が正しく動作しない
動作するコードは
if(choice.equals("One Time"))
{
alarmManager.set(AlarmManager.RTC_WAKEUP, PERIOD, pendingIntent); // here PERIOD is the time selected by me in milliseconds...
Toast.makeText(ActivityReminder.this, "Meeting Reminder Set One Time",
Toast.LENGTH_LONG).show();
}
どこが悪いのでしょうか。何かお手伝いいただけると助かります。
解決方法は?
アラームは金曜日の9:15にしか設定されないのでは?これは、AlarmManagerのドキュメントにある以下の行が原因であるはずです。
If there is already an alarm scheduled for the same IntentSender, it will first be canceled.
http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int
android.app.PendingIntent)
この場合、5つのPendingIntentsを用意するか、最初のイベントに対してアラームを設定し、そのアラームを受信したら次の日のアラームを設定する、というようにします。
最初の方法では、5つの異なるPendingIntentが必要で、それらのrequestCodeまたはbacking Intentが(異なるタイプ、アクション、またはカテゴリで)異なる必要があることを意味するので、私はおそらく2番目のオプションに行くでしょう。
関連
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】SDKの場所がandroid studioで見つからない。
-
[解決済み] Android Fragment onAttach() 非推奨
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] Androidアプリのアイコン設定
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
[解決済み] シンボル 'context' を解決できない
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み】プロガードを有効にすると、タスク ':app:crashlyticsStoreDeobsDebug' の依存関係を判断できない。
-
[解決済み】カメラサービスへの接続に失敗しました。
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み] サポートされていないメソッドです。BaseConfig.getApplicationIdSuffix()がサポートされていません。
-
[解決済み] Android SDK の場所には空白を含めないでください。NDK ツールで問題が発生するためです。
-
[解決済み] Androidでイメージビューの背景を透明に設定する
-
[解決済み] APKのインストール中にDELETE_FAILED_INTERNAL_ERRORエラーが発生する。