Java 恢复警报会导致应用程序崩溃
我想做的事;用户使用DatePicker选择一个他希望收到通知的日期,然后我将名称、id、发布日期和alertTime(从用户选择的时间转换而来的毫秒时间)添加到报警数据库中,该数据库名为myAlarmsDB,是一个简单的SQL。当OnReceive()方法调用它时,我从数据库中删除条目,除了关闭设备外,一切正常;警报无法恢复,使我的应用程序崩溃,没有堆栈跟踪。知道有什么问题吗Java 恢复警报会导致应用程序崩溃,java,android,android-intent,broadcastreceiver,android-broadcast,Java,Android,Android Intent,Broadcastreceiver,Android Broadcast,我想做的事;用户使用DatePicker选择一个他希望收到通知的日期,然后我将名称、id、发布日期和alertTime(从用户选择的时间转换而来的毫秒时间)添加到报警数据库中,该数据库名为myAlarmsDB,是一个简单的SQL。当OnReceive()方法调用它时,我从数据库中删除条目,除了关闭设备外,一切正常;警报无法恢复,使我的应用程序崩溃,没有堆栈跟踪。知道有什么问题吗 public class AlertReceiver extends BroadcastReceiver {
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);
}
权限:
<receiver android:name=".AlertReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
有什么想法吗?如果有人能给我一个我所要求的代码模板?我肯定你的应用程序不会在没有堆栈跟踪的情况下崩溃。检查logcat(但不要过滤它,因为您可能会错过一些重要的内容)。然后在这里发布你的stacktrace。我没有过滤它,在我的logcat中我有无过滤器选项,甚至尝试了所有选项,但仍然没有stacktrace。你知道吗?如果有人能给我一个我所要求的代码模板?我肯定你的应用程序不会在没有堆栈跟踪的情况下崩溃。检查logcat(但不要过滤它,因为您可能会错过一些重要的内容)。然后在这里发布你的stacktrace。我没有过滤它,在我的logcat中,我有无过滤器选项,甚至尝试了所有选项,但仍然没有stacktrace。