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

}

ここからアラートボックスを作成するアクティビティへ

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

デバイスを再起動してもアラームが鳴るようにしたいので、誰か助けてください。

4

1 に答える 1

1

あなたはあなたがReceiver内のあなたの警報行動BroadcastReceiverをチェックしてリセットしなければならない使用しなければなりません。Intent.ACTION_BOOT_COMPLETED例えば:

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

}

更新しました:

共有設定を使用してデータを保存するか、データベースを使用することもできます。私はshare-preferenceを使用して同じことをしました、以下のコードをチェックしてください:

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 に答える