0

我正在为我的 java 主题开发一个提醒应用程序。

我正在使用此代码来创建待处理的警报,这是代码。

Intent intent2 = new Intent(ReminderActivity.this, AlarmReceiver.class);
                intent2.putExtra("idint", iid);
                intent2.putExtra("title", myRem.getText().toString());
                intent2.putExtra("title_desc", myRemDesc.getText().toString());
                intent2.putExtra("date", date.toString());
                PendingIntent pendingIntent = 
                        PendingIntent.getActivity(ReminderActivity.this,iid, intent2,
                                PendingIntent.FLAG_CANCEL_CURRENT);
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

我已经设置了我的 AndroidManifest.xml 以在启动时添加我的接收器

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="PollReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
</receiver>

最后,这是我的 PollReceiver.class

public class PollReceiver extends BroadcastReceiver {
  static DBAdapter db;

  @Override
  public void onReceive(Context ctxt, Intent i) {
    scheduleAlarms(ctxt);
  }

  static void scheduleAlarms(Context ctxt) {
    db.open();
     Cursor c = db.getAllRecords();
     if(c.moveToFirst())
        {
            do{
                int iid = (int) c.getLong(0);
                String title = c.getString(1);
                String title_desc = c.getString(2);
                String date = c.getString(3);

                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date myDate = null;
                    try {
                        myDate = sdf.parse(date);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                Calendar cal = Calendar.getInstance();
                cal.setTime(myDate);

                Calendar CurCal = Calendar.getInstance();

                if (cal.compareTo(CurCal) <= 0 )
                {
                    Intent intent2 = new Intent(ctxt, AlarmReceiver.class);
                    intent2.putExtra("idint", iid);
                    intent2.putExtra("title", title);
                    intent2.putExtra("title_desc", title_desc);
                    intent2.putExtra("date", date);

                    PendingIntent pendingIntent = 
                            PendingIntent.getActivity(ctxt,iid, intent2,
                                    PendingIntent.FLAG_CANCEL_CURRENT);
                    AlarmManager am = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);
                    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

            }

            } while(c.moveToNext());

        }

        db.close();

  }
}

但它似乎仍然没有重新加载我的未决警报。

任何疯狂的猜测家伙?

4

1 回答 1

0

如果您确定您的警报配置正确并且问题是您没有收到“android.intent.action.BOOT_COMPLETE”操作,那么请考虑一下:

作为谷歌的反恶意软件举措。谷歌提倡用户应该首先从启动器启动一个活动,然后应用程序可以做很多事情,防止 BOOT_COMPLETED 被传递,直到活动至少被明确启动一次。

在最近的 android 版本上是一个常见的错误。

问候!

于 2014-05-01T19:17:45.623 回答