从sqlite db按日期启动通知

从sqlite db按日期启动通知,sqlite,notifications,alarmmanager,Sqlite,Notifications,Alarmmanager,在我的应用程序中,我将日期(dd-mm-yyyy)保存在SQLite数据库中,我希望在该日期前1天启动te通知。 我是不是做错了什么,通知没有开始 public class AlarmReceiver extends BroadcastReceiver { BHItem currentItem; @Override public void onReceive(Context context, Intent intent) { NotificationManager mNM; m

在我的应用程序中,我将日期(dd-mm-yyyy)保存在SQLite数据库中,我希望在该日期前1天启动te通知。 我是不是做错了什么,通知没有开始

public class AlarmReceiver extends BroadcastReceiver {
BHItem currentItem;

@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager mNM;
    mNM = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);

    Notification notification = new Notification(R.drawable.ic_launcher, "Return time",System.currentTimeMillis());

    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);

    notification.setLatestEventInfo(context, context.getText(R.string.alarm_service_label), currentItem.getItem() + " return to: " + currentItem.getReturndate(), contentIntent);
    mNM.notify(R.string.alarm_service_label, notification);
    notification.flags|= Notification.FLAG_AUTO_CANCEL;
}
}
AlarmManager类 在这里,我试图将当前日期与数据库中的日期进行比较,如果它是在

public class AlarmService  {

private BHItem alarmDate;
private Context context;
private PendingIntent mAlarmSender;


public AlarmService(Context context) {
    this.context = context;
    mAlarmSender = PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0);
}

public void startAlarm(){


    Calendar currentDate = Calendar.getInstance();

        Calendar myDate= Calendar.getInstance();

        try {
            Date convDate = new SimpleDateFormat("dd-MM-yyyy").parse(alarmDate.getReturndate());
            myDate.setTime(convDate);


            if (currentDate.compareTo(myDate)== 1) {
                long dd = myDate.getTimeInMillis();
                AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, dd, mAlarmSender);
            }
        } catch (Exception e) {
           // Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }

}
}
我也试着用这个来启动闹钟,但还是一无所获 公共空间startAlarm(){

我在舱单上加了一句

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<application...
<receiver android:process=":remote" android:name="AlarmReceiver"></receiver>


我已测试此代码,onReceive不会被触发。为了使其正常工作,您应该在清单中的接收器配置中设置一个意图筛选器。然后在设置报警的意图时使用相同的筛选器。在清单中设置接收器,如下所示:

<receiver
        android:name="AlarmReceiver"
        android:exported="true"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.NOTIFY" />
        </intent-filter>
    </receiver>
为此:

mAlarmSender = PendingIntent.getBroadcast(context, 0, new Intent("android.intent.action.NOTIFY"), 0);
这些更改使其在API 15上工作。请确保先测试此解决方案,并在几秒钟后将短时警报设置为激发,这样调试它会容易得多

mAlarmSender = PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0);
mAlarmSender = PendingIntent.getBroadcast(context, 0, new Intent("android.intent.action.NOTIFY"), 0);