마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AlarmManger로 지정 시간마다 알림보내기 [closed]

0 추천

제가 사용자에게서 시간을 받아서 해당 시간에 계획 정보를 알림이 뜨게 하고 싶은데 자꾸 가장 마지막에 나와야할 내용이 들어가네요 또 다음 시간에 떠야할 알림도 안뜨고 혹시 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());
        }
}


질문을 종료한 이유: 해결했습니다 https://hoyi327.tistory.com/33
pdj (180 포인트) 님이 2020년 12월 2일 질문
pdj님이 2020년 12월 3일 closed
...