3

毎日実行され、通知を表示する次のコードを作成しました。

class DailyNotification extends BroadcastReceiver {

    // Register the alarm and set it at 7am everyday (repeating mode)
    public static void registerAlarm(Context paramContext) {
        Calendar calendar = Calendar.getInstance();
        if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
            calendar.add(7, 1);
        }
        calendar.set(Calendar.HOUR_OF_DAY, 7);
        calendar.set(Calendar.MINUTE, 00);
        calendar.set(Calendar.SECOND, 00);

        // PendingIntent that will perform a broadcast
        PendingIntent localPendingIntent = PendingIntent
                .getBroadcast(
                        paramContext,
                        22341,
                        new Intent(
                                "com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION"),
                        PendingIntent.FLAG_UPDATE_CURRENT);
        // Retrieve an AlarmManager to set a repeating daily alarm
        ((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1,
                calendar.getTimeInMillis(), 1000,
                localPendingIntent);
    }
}

マニフェスト ファイルは次のようになります。

<receiver
    android:name=".utils.DailyNotification"
    android:process=":remote" >
    <intent-filter>
        <action android:name="com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION" />
        <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

しかし、私は何の通知も受け取りません。誰でもこの問題を解決する方法を教えてもらえますか?

また、以下のコードの意味は何ですか

Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
    calendar.add(7, 1);
}
4

1 に答える 1

1

部分的に答えます。

1.

コードの行を置き換えます

((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1,
                calendar.getTimeInMillis(), 1000,
                localPendingIntent);

この行で:

((AlarmManager) paramContext.getSystemService(Context.ALARM_SERVICE)).setRepeating(1,
                calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
                localPendingIntent);

実際にシステムサービスを取得する必要があります-Context.ALARM_SERVICE

また、繰り返し頻度を 1000 ミリ秒に設定する代わりに、 を使用AlarmManager.INTERVAL_DAYして、希望する設定時間に毎日トリガーする必要があります。

2.

このコードの意味について:

Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
    calendar.add(7, 1);
}

ここでcalendar.add(7, 1)は、私には完全に意味がありません。calendar の add() 関数は、一意の整数で識別される特定の Calendar フィールドに特定の金額を追加するために使用されます。

コード行calendar.add(7, 1);が に置き換えられたcalendar.add(Calendar.DATE, 1);場合、このコードよりも意味があるかもしれません。実際には、アラームの登録中に、現在の時間が 7 より大きい場合 (つまり、現在の時刻が午前 7 時を超えている場合) をチェックします。次の日(明日)の午前7時。

3.

また、マニフェスト ファイルの宣言についても疑問があります。参照しているソースと照合する必要があります。

一般に、AlarmManager のマニフェスト ファイルの構造は次のようになります。

<application>

    <activity>
        <intent-filter>
            <action/>

            <category/>
        </intent-filter>
    </activity>

    <receiver android:name=".DailyNotification" />
</application>

それが役立つことを願っています。

于 2013-07-31T11:44:43.507 に答える