5

github で見つけた LocalNotification プラグインを使用して、アプリから毎日通知を送信しようとしています。アプリケーションが開始されるとすぐに通知を送信する次のコードがあります。

    var notification = cordova.require("cordova/plugin/localNotification");

              document.addEventListener('deviceready', onDeviceReady, false);

              function onDeviceReady() {
                alert('device ready');
               var id = 0;
      id++;
      newDate = new Date();
      newDate.setUTCHours(1,30,1);
          notification.add({
                id : id,
                date : newDate,
                message : "Your message here",
                subtitle: "Your subtitle here",
                ticker : "Ticker text here",
                repeatDaily : true
          });                
}

しかし、アプリケーションを開かずに自動的に通知を送信したいのです。オプション repeatDaily を true に設定すると役立ちますか?

私は調査を行い、他の人が LocalNotification プラグインを使用してそれを達成できることを発見しました。

AVD の電源を 1 日中オンにしておく必要があるため、テスト方法がよくわかりません。目的はとてもシンプルです。アプリを開かずに、毎日 1 つの通知をユーザーに送信する必要があります。どんな助けでも大歓迎です!! ありがとう !!

4

1 に答える 1

4

repeatDaily私はプラグインを自分で使用したことはありませんが、コードを少し掘り下げると、通知を設定している限り、true毎日そこにあることがわかります.

AlarmHelperクラスを見ると、そのパラメータ設定が毎日繰り返される if 句が表示されます。

final AlarmManager am = getAlarmManager();

...

if (repeatDaily) {
        am.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, AlarmManager.INTERVAL_DAY, sender);
    } else {
        am.set(AlarmManager.RTC_WAKEUP, triggerTime, sender);
    }

AlarmReceiverクラスで説明されている追加の詳細の 1 つは、前の時刻の時刻を設定すると (たとえば、現在が 11:00 で、アラームを毎日 08:00 に繰り返すように設定した場合)、すぐに起動し、次に翌日、定刻に。したがって、そのクラスにはそれを防ぐための if 句があります。

if (currentHour != alarmHour && currentMin != alarmMin) {
            /*
             * If you set a repeating alarm at 11:00 in the morning and it
             * should trigger every morning at 08:00 o'clock, it will
             * immediately fire. E.g. Android tries to make up for the
             * 'forgotten' reminder for that day. Therefore we ignore the event
             * if Android tries to 'catch up'.
             */
            Log.d(LocalNotification.PLUGIN_NAME, "AlarmReceiver, ignoring alarm since it is due");
            return;
        }

日付を設定するには、dateparam を使用します。使用しているサンプルnew Date()では、​​デフォルトで現在の日時が返され、通知は毎日同時に表示されます。アラームに別の時間を指定したい場合は、目的の時間で日付オブジェクトを渡します!

編集

コードが 1 回だけ実行されるようにする簡単な方法は、localstorage を使用することです。

function onDeviceReady(){
   ...
   //note that this will return true if there is anything stored on "isAlarmSet"
   var isSet = Boolean(window.localStorage.getItem("isAlarmSet")); 
   if (isSet){
       //Alarm is not set, so we set it here
       window.localStorage.setItem("isAlarmSet",1);
    }
}

アラームの設定を解除した場合は、必ず変数をクリアしてください。

localStorage.removeItem("isAlarmSet);
于 2013-07-01T11:22:46.570 に答える