恢复警报会导致应用程序崩溃

时间:2015-12-03 20:03:23

标签: java android android-intent broadcastreceiver android-broadcast

我想做什么;用户选择他想要通过DatePicker通知的日期,然后我添加名称,id,发布日期和alertTime(从用户选择的时间转换的毫秒时间)作为条目报警数据库名为 myAlarmsDB ,这是一个简单的SQL。当它被OnReceive()方法调用时,我从数据库中删除了条目,除非我关闭设备,否则一切都很好;警报无法恢复并使我的应用程序崩溃而没有堆栈跟踪。知道可能是什么问题吗?

public class AlertReceiver extends BroadcastReceiver {
    String name = "";
    int id = 0;
    String releaseDate = "";
    // Called when a broadcast is made targeting this class
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent intActivity = new Intent(context, MainActivity.class);
        intActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intActivity);

        if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            Toast.makeText(context, "BOOT" , Toast.LENGTH_LONG).show();
            // Set the alarm here.
            Intent alertIntent = new Intent(context, AlertReceiver.class);
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

            for (Alarm alarm : MyApp.myAlarmsDB.getAllData()) {
                alertIntent.putExtra("id", Integer.parseInt(alarm.get_id()));
                alertIntent.putExtra("name", alarm.get_name());
                alertIntent.putExtra("releaseDate", alarm.get_releaseDate());
                PendingIntent pendingIntent = PendingIntent.getBroadcast(context, Integer.parseInt(alarm.get_id()), alertIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                alarmManager.set(AlarmManager.RTC_WAKEUP, Long.valueOf(Integer.parseInt(alarm.get_alertTime())), pendingIntent);
            }
        }

        id = intent.getIntExtra("id", -1);
        name = intent.getStringExtra("name");
        releaseDate = intent.getStringExtra("releaseDate");

        //delete from database
        MyApp.myAlarmsDB.deleteFromId(String.valueOf(id)); 
    }
}

我如何设置闹钟

public void setAlarm(View view) {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, yearDate);
    cal.set(Calendar.MONTH, monthDate);
    cal.set(Calendar.DAY_OF_MONTH, dayDate);
    long alertTime = cal.getTimeInMillis();

    Intent alertIntent = new Intent(this, AlertReceiver.class);
    // store id
    alertIntent.putExtra("id", mainId);
    alertIntent.putExtra("name", name);
    alertIntent.putExtra("releaseDate", releaseDate);

    Alarm alarm = new Alarm(String.valueOf(mainId), name, releaseDate, String.valueOf(alertTime));
    MyApp.myAlarmsDB.addAlarm(alarm);

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, mainId, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent);
}

Permissions:

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

0 个答案:

没有答案