0

同じアクティビティで SharedPreferences を使用して保存されたユーザー入力値 (時間、分) に基づいてアラームを開始するアクティビティを作成しました。私がしたいのは、電話の再起動後にそのアラームを開始することですが、アクティビティで SharedPreferences を使用して保存された値を、BOOT_COMPLETED アクションでフィルタリングする BroadcastReceiver に取得する必要があります。このようにしようとしましたが、デフォルト値は「0」です。

package com.salivan.calmmanager;

import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class AlarmReceiverBC extends BroadcastReceiver {
int hour = 0;
int min = 0;

public AlarmReceiverBC() {
}

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
        SharedPreferences savedData = context.getSharedPreferences("PREFS_SAVED_DATA", Context.MODE_PRIVATE); //here I try to get
        //the SharedPreferences but I think that the context object is wrong because it's sent by system and not by the activity where my values are... 
        Calendar calendar = Calendar.getInstance();
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

        this.hour = savedData.getInt("HOUR", 0);
        this.min = savedData.getInt("MIN", 0);

        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, this.hour);
        calendar.set(Calendar.MINUTE, this.min);
        calendar.set(Calendar.SECOND, 0);

        Intent intentForReceiver = new Intent(context, AlarmReceiver.class);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intentForReceiver, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
    }

}
}
4

0 に答える 0