제가 사용자에게서 시간을 받아서 해당 시간에 계획 정보를 알림이 뜨게 하고 싶은데 자꾸 가장 마지막에 나와야할 내용이 들어가네요 또 다음 시간에 떠야할 알림도 안뜨고 혹시 alarm함수를 어떻게 호출해야할지 아시는 분 있나요?
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
planData = intent.getParcelableArrayListExtra("plan");
if(planData != null) {
for (int i = 0; i < planData.size(); i++) {
MainData mainData;
if (1 == planData.get(i).importance) {
mainData = new MainData(R.drawable.h, planData.get(i).title, planData.get(i).ft, planData.get(i).context);
} else if (2 == planData.get(i).importance) {
mainData = new MainData(R.drawable.m, planData.get(i).title, planData.get(i).ft, planData.get(i).context);
} else {
mainData = new MainData(R.drawable.l, planData.get(i).title, planData.get(i).ft, planData.get(i).context);
}
arrayList.add(mainData);
mainAdapter.notifyDataSetChanged();
Alarm(planData.get(i).sHour, planData.get(i).sMinute, planData.get(i).title, planData.get(i).context, planData.get(i).importance); // 알람메소드 호출 근데 마지막 데이터의 정보가 들어간다
}
}
public void Alarm(int sHour, int sMinute, String title, String context, int importance) {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, BroadcastD.class);
intent.putExtra("title", title);
intent.putExtra("context", context);
intent.putExtra("importance", importance);
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, sHour);
calendar.set(Calendar.MINUTE, sMinute);
//알람 예약
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------
package com.example.plannerapp;
public class BroadcastD extends BroadcastReceiver {
String INTENT_ACTION = Intent.ACTION_BOOT_COMPLETED;
static String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";
@Override
public void onReceive(Context context, Intent intent) {//알람 시간이 되었을때 onReceive를 호출함
String title = intent.getStringExtra("title");
String mContext = intent.getStringExtra("context");
int importance = intent.getIntExtra("importance", 0);
sendNotification(context, title, mContext, importance);
}
public static void sendNotification(Context mcontext, String title, String mContext, int importance) {
Intent intent = new Intent(mcontext, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mcontext, 0 /* Request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager notificationManager = (NotificationManager) mcontext.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Rewards Notifications", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mcontext, NOTIFICATION_CHANNEL_ID);
if(importance == 1) {
notificationBuilder.setSmallIcon(R.drawable.h)
.setContentTitle(title)
.setContentText(mContext)
.setContentIntent(pendingIntent);
}
else if(importance == 2) {
notificationBuilder.setSmallIcon(R.drawable.m)
.setContentTitle(title)
.setContentText(mContext)
.setContentIntent(pendingIntent);
}
else {
notificationBuilder.setSmallIcon(R.drawable.l)
.setContentTitle(title)
.setContentText(mContext)
.setContentIntent(pendingIntent);
}
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}