Android 重新启动后未调用报警

Android 重新启动后未调用报警,android,Android,我已经创建了一个程序,可以为日期选择器手动设置的不同日期创建报警。 代码工作正常。但是如果重新启动,数据丢失,警报不起作用,我如何克服 我使用的代码是 int count; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OnClickL

我已经创建了一个程序,可以为日期选择器手动设置的不同日期创建报警。 代码工作正常。但是如果重新启动,数据丢失,警报不起作用,我如何克服

我使用的代码是

    int count;
@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    OnClickListener setClickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            /** This intent invokes the activity DemoActivity, which in turn opens the AlertDialog window */
            Intent i = new Intent("in.com.example.demoactivity");

            /** Creating a Pending Intent */
            PendingIntent operation = PendingIntent.getActivity(getBaseContext(), count++, i, Intent.FLAG_ACTIVITY_NEW_TASK);

            /** Getting a reference to the System Service ALARM_SERVICE */
            AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE);

            /** Getting a reference to DatePicker object available in the MainActivity */
            DatePicker dpDate = (DatePicker) findViewById(R.id.dp_date);

            /** Getting a reference to TimePicker object available in the MainActivity */
            TimePicker tpTime = (TimePicker) findViewById(R.id.tp_time);

            int year = dpDate.getYear();
            int month = dpDate.getMonth();
            int day = dpDate.getDayOfMonth();
            int hour = tpTime.getCurrentHour();
            int minute = tpTime.getCurrentMinute();


            GregorianCalendar calendar = new GregorianCalendar(year,month,day, hour, minute);

            long alarm_time = calendar.getTimeInMillis();

            /** Setting an alarm, which invokes the operation at alart_time */
            alarmManager.set(AlarmManager.RTC_WAKEUP  , alarm_time , operation);

            /** Alert is set successfully */
            Toast.makeText(getBaseContext(), "Alarm is set successfully",Toast.LENGTH_SHORT).show();

        }
    };      

    OnClickListener quitClickListener = new OnClickListener() {         
        @Override
        public void onClick(View v) {
            finish();
        }
    };

    Button btnSetAlarm = ( Button ) findViewById(R.id.btn_set_alarm);
    btnSetAlarm.setOnClickListener(setClickListener);

    Button btnQuitAlarm = ( Button ) findViewById(R.id.btn_quit_alarm);
    btnQuitAlarm.setOnClickListener(quitClickListener);

}
从那个到一个活动片段

    public class DemoActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState); 

    /** Creating an Alert Dialog Window */
    AlertDemo alert = new AlertDemo();

    /** Opening the Alert Dialog Window */
    alert.show(getSupportFragmentManager(), "AlertDemo");       
}
}

从此处转到创建alertbox的活动

公共类AlertDemo扩展了DialogFragment{

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    /** Turn Screen On and Unlock the keypad when this alert dialog is displayed */
    getActivity().getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_DISMISS_KEYGUARD);


    /** Creating a alert dialog builder */
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    /** Setting title for the alert dialog */
    builder.setTitle("Alarm");

    /** Setting the content for the alert dialog */
    builder.setMessage("An Alarm by AlarmManager");

    /** Defining an OK button event listener */
    builder.setPositiveButton("OK", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            /** Exit application on click OK */
            getActivity().finish();
        }                       
    });

    /** Creating the alert dialog window */
    return builder.create();
}

/** The application should be exit, if the user presses the back button */ 
@Override
public void onDestroy() {       
    super.onDestroy();
    getActivity().finish();
}

我希望即使我重新启动设备,也能调用报警,请有人帮我整理一下

您必须使用
广播接收器
,您必须在其中检查
意图。操作\u启动\u完成
并重置接收器内的报警操作。例如:

public class MyBootReceiver extends BroadcastReceiver{

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

        if(intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) {
            //reset your alarm here
        }
    }

}
更新:

使用共享首选项存储数据,也可以使用数据库。我使用共享首选项也做了同样的操作,请检查以下代码:

public class MyBootReceiver extends BroadcastReceiver{

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

        if(intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) {
            SharedPreferences mPreferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
            String datetime = mPreferences.getString("date", null);
            if(!TextUtils.isEmpty(datetime)) {
                Utility.setNotification(context);//set your alarm here.

            }
        }
    }

}

我以前丢失了所有的数据集,我不想这样