使用AlarmManager和BroadCast接收器在特定时间不显示通知

时间:2015-03-20 18:29:25

标签: android broadcastreceiver alarmmanager android-notifications

这就是我所说的广播接收器类

private void createAlarmNotification() {

    // TODO Auto-generated method stub
        Intent myIntent = new Intent(getApplication() , AlarmSet.class);     
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
       PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplication(), 0, myIntent, 0);
       Calendar calendar1 = Calendar.getInstance();

       Calendar calendar = Calendar.getInstance();

       calendar.set(2015, 3, 20, 23, 55, 00);
       Alarm a= new Alarm();
       a.SetAlarm(MainActivity.this, calendar.getTimeInMillis(), 60*1000);


}

这是我的广播接收班

public class Alarm extends BroadcastReceiver {

private final long GMT6 = AlarmManager.INTERVAL_HOUR * 6;
private final long DAY = AlarmManager.INTERVAL_DAY;

private ActivityManager activityManager;
private Context context;


@Override
public void onReceive(Context context, Intent intent) {

    this.context = context;
    PowerManager pm = (PowerManager) context
            .getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(
            PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();

    showNotification();

    wl.release();
}


public void SetAlarm(Context context, long userHour, long userMinute) {
    this.context = context;
    AlarmManager am = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Alarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setExact(AlarmManager.RTC_WAKEUP, userHour, pi);

}



public void showNotification() {

    Uri soundUri = RingtoneManager
            .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent pIntent = PendingIntent
            .getActivity(context, 0, intent, 0);

    Notification mNotification = new Notification.Builder(context)
            .setContentTitle("")
            .setContentText("")
            .setSmallIcon(R.drawable.ic_launcher).setContentIntent(pIntent)
            .setSound(soundUri)
            .addAction(R.drawable.ic_launcher, "View", pIntent)
            .addAction(0, "Remind", pIntent).build();

    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    mNotification.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify(0, mNotification);
}


}

}

这是清单代码

<receiver android:name="com.example.notification.Alarm"
    android:enabled="true"
    android:exported="true" ></receiver>

但广播接收器类不显示任何类型的通知。 找到解决问题的正确建议会很有帮助。

1 个答案:

答案 0 :(得分:1)

在此次电话会议中

calendar.set(2015, 3, 20, 23, 55, 00);

您将日历的月份设置为4月,而不是3月,这就是为什么它没有被触发。如果您想将闹钟设置为60秒,您可以写下:

    Calendar calendar = Calendar.getInstance();
    a.SetAlarm(MainActivity.this, calendar.getTimeInMillis(), 60*1000);