在Android中发送通知时出现困惑

3
我将尝试通过以下代码发送推送通知。 问题: 我想在两天后向用户发送推送通知。
在MainClass中:
Intent intent = new Intent(MainActivity.this, NotificationReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), AlarmManager.INTERVAL_DAY*2, pendingIntent);

The Reciever Class is

public class NotificationReciever extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent arg1) {
    showNotification(context);

}


private void showNotification(Context context) {
    // TODO Auto-generated method stubMain

    PackageManager pm = context.getApplicationContext().getPackageManager();
    ApplicationInfo ai;
    try {
        ai = pm.getApplicationInfo( context.getPackageName(), 0);
    } catch (final NameNotFoundException e) {
        ai = null;
    }
    final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle(applicationName)
    .setContentText("We haven't seen you in a while. Play now");
    mBuilder.setContentIntent(pi);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(0, mBuilder.build());
}

困惑: 当我运行这个代码时,通知会立即发送,并在两天后再次发送。我只想在两天后再次发送通知,而不是立即发送。 另外,每当用户启动应用程序时,我是否必须调用上述代码,还是只需调用一次?或者我必须在两天后调用它?我希望只要应用程序安装了,就每两天发送一次通知。

请指导我。 谢谢

1个回答

1

setRepeating 方法的第二个参数表示第一个闹钟应该何时响起。您已将其指定为 System.currentTimeMillis(),因此它会立即响起。

更改为:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), AlarmManager.INTERVAL_DAY*2, pendingIntent);

long updateInterval = AlarmManager.INTERVAL_DAY*2;
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + updateInterval, updateInterval, pendingIntent);

关于您的第二个问题

其次,用户每次启动应用程序时,我是否需要调用上述代码?还是只需要调用一次?或者我必须在两天后才能调用它?只要安装了应用程序,我想每两天发送一次通知。

您只需要调用一次。通知将每两天显示一次,直到卸载该应用程序为止。

您可以为意图android.intent.action.PACKAGE_FIRST_LAUNCH注册一个BroadcastReceiver,该意图将在首次启动应用程序时发送。在这里,您可以设置重复的闹钟。如果安装了应用程序的新版本,则可能需要处理android.intent.action.PACKAGE_REPLACED


非常感谢 :) 悬赏将在22小时后颁发。 - Jawad Amjad
赏金已经发放,感谢您的帮助。 还有一件事我想知道,如果我已经设置了2天后发送通知的调用,那么如何暂停通知呢? - Jawad Amjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接