ammukuttylive
ammukuttylive

Reputation: 365

alarm not calling after reboot

I had created a program that will create alarm for different date set manually from the date picker. The code is working properly.but if reboot it losing the data and alarm is not working how can i overcome that

The code I used is

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

}

From that to an activity fragment

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

}

from here to an activity which create an alertbox

public class AlertDemo extends 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();
}

I want thealarm to be invoken even if I reboot the device,Somebody please help me to sort it out

Upvotes: 0

Views: 485

Answers (1)

RobinHood
RobinHood

Reputation: 10969

You have to Use BroadcastReceiver in which you have to check Intent.ACTION_BOOT_COMPLETED and reset your alarm actions within Receiver. For example:

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
        }
    }

}

Updated:

Use share-preference to store you data, or you can use database too. I did same using share-preference, check below code:

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.

            }
        }
    }

}

Upvotes: 1

Related Questions