0

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

我使用的代码是

    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");       
}

}

从这里到创建警报框的活动

公共类 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();
}

即使我重新启动设备,我也希望调用警报,请有人帮我解决它

4

1 回答 1

1

您必须使用BroadcastReceiver其中您必须Intent.ACTION_BOOT_COMPLETED在 Receiver 中检查和重置警报操作。例如:

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.

            }
        }
    }

}
于 2013-02-19T10:31:55.547 回答