0

3 つの質問があります。

1)これまでにこれを実装しました:

public final class CalculateTime {

    public int iHour;
    public int iMinute;
    public Calendar calendar;

    private void calculateRandomNumbers() {
        Random randomNumberGenerator = new Random();
        iHour = randomNumberGenerator.nextInt(19 - 9) + 9;
        iMinute = randomNumberGenerator.nextInt(59);
    }

    public void calculateRandomTime() {
        calculateRandomNumbers();
        calendar = GregorianCalendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.HOUR_OF_DAY, iHour);
        calendar.set(Calendar.MINUTE, iMinute);
    }
}

そのため、通知は 9 時から 19 時の間でいつでも 1 回プッシュする必要があります。ただし、通知は 9 時から 19 時の間に 2 回送信されます。

2) 計算が過去の場合、通知はすぐにプッシュされます。

3) 週に 1 回通知を送信したいのですが、どのように実装すればよいですか? 私が試してみました:

// For Monday
calendar.set(Calendar.DAY_OF_WEEK, 2)

しかし、これは簡単にテストできないため、これが正しいかどうかはわかりません。(毎回1週間も待てない!) :/

アラームを設定するためのコード:

public final class NotificationService extends IntentService {

    public static final String DESCRIPTION = "description";
    public static final String HEADLINE = "headline";

    private static final int FM_NOTIFICATION_ID = 0;

    public NotificationService() {
        super("NotificationService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        /*
         * This method is invoked whenever an intent for this service is fired.
         * The actual firing is done by the AlarmManager in the
         * TodoEntriesAdapter, but really we don't care at this point where
         * exactly the intent came from.
         */
        String description = intent.getStringExtra(DESCRIPTION);
        String headline = intent.getStringExtra(HEADLINE);

        addNotification(description, headline);
    }

    private void addNotification(String description, String headline) {

        NotificationCompat.Builder builder =
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(headline)
            .setContentText(description)
            .setAutoCancel(true);

        Intent notificationIntent = new Intent(this, ReadNotification.class);
        notificationIntent.putExtra("description", description);
        notificationIntent.putExtra("headline", headline);

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,   
            PendingIntent.FLAG_UPDATE_CURRENT);
            builder.setContentIntent(contentIntent);

        // Add as notification  
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
        manager.notify(FM_NOTIFICATION_ID, builder.build());  
        }
    }
4

1 に答える 1

0
  1. 通知は 2 回送信されます。

    と実際にやり取りするコードを見るAlarmManagerと役立ちます。選択した時刻を表示すると (たとえばログ機能を使用して)、どの通知が正しいか、アラームをスケジュールするコードが 2 回呼び出されているかどうかを確認できます。

  2. 計算が過去の場合、通知はすぐにプッシュされます。

    これは文書化された動作です。過去の時刻かどうかを手動で確認し、過去の場合は 1 週間前に進める必要があります。

  3. 週に1回通知を送信したい。

    試してみてくださいsetRepeating(type, start, 7 * AlarmManager.INTERVAL_DAY, operation)

    これを簡単にテストすることはできません。

    電話の日付を手動で変更する原始的な方法の他に、AlarmManager クラスをモックすることでアプリをテストできます (適切なメソッドが適切なパラメーターで呼び出されることを確認するダミー クラスに置き換えます)。

于 2013-06-21T13:41:52.027 に答える