Soru & Cevap

Timepicker'dan Alınan Bilgilerle Bildirim Göndermek

19.05.2020 - 03:38

Selamlar dostlar,

Timepicker'dan aldığım bilgilerle Alarm Manager sınıfını kullanarak uygulamaya bildirim göndermek istiyorum. Ama bir türlü başaramadım. Kodlarım aşağıda. Hatam nedir ?

MainActivity. java

package com.info.alarmtetiklemebildirim2018;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;

import java.util.Calendar;

public class MainActivity extends Activity {

    private Calendar calendar;
    private Button buttonBildirimGonder;
    private TimePickerDialog timePickerDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());

        timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
            calendar.set(Calendar.MINUTE,minute);


            }
        }, Calendar.HOUR_OF_DAY, Calendar.MINUTE, true);

        buttonBildirimGonder = (Button) findViewById(R.id.buttonBildirimGonder);


        buttonBildirimGonder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                zamanliliBildirimGonder();
            }
        });


    }

    
    private void zamanliliBildirimGonder() {

        NotificationCompat.Builder builder;

        NotificationManager bildirimYoneticisi =
                (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

        Intent ıntent = new Intent(this,MainActivity.class);

        PendingIntent gidilecekIntent = PendingIntent.getActivity(this,1,ıntent,PendingIntent.FLAG_UPDATE_CURRENT);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            String kanalId = "kanalId";
            String kanalAd = "kanalAd";
            String kanalTanım = "kanalTanım";
            int kanalOnceligi = NotificationManager.IMPORTANCE_HIGH;

            NotificationChannel kanal = bildirimYoneticisi.getNotificationChannel(kanalId);

            if (kanal == null) {
                kanal = new NotificationChannel(kanalId, kanalAd, kanalOnceligi);
                kanal.setDescription(kanalTanım);
                bildirimYoneticisi.createNotificationChannel(kanal);
            }

            builder = new NotificationCompat.Builder(this, kanalId);

            builder.setContentTitle("Başlık")
                    .setContentText("İçerik")
                    .setSmallIcon(R.drawable.resim)
                    .setAutoCancel(true)
                    .setContentIntent(gidilecekIntent);

        } else {

            builder = new NotificationCompat.Builder(this);

            builder.setContentTitle("Başlık")
                    .setContentText("İçerik")
                    .setSmallIcon(R.drawable.resim)
                    .setContentIntent(gidilecekIntent)
                    .setAutoCancel(true)
                    .setPriority(Notification.PRIORITY_HIGH);
        }


        Intent broadcastIntent =
                new Intent(MainActivity.this,BildirimYayinlayici.class);

        broadcastIntent.putExtra("bildirimNesnesi",builder.build());

        PendingIntent gidilecekBroadcast = PendingIntent.getBroadcast(this
                ,0
                ,broadcastIntent
                ,PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager =
                (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),gidilecekBroadcast);



    }



}

 

Burası da Broadcast Receiver sınıfım BildirimYakalayici.java

package com.info.alarmtetiklemebildirim2018;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BildirimYayinlayici extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {

        NotificationManager bildirimYoneticisi = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification bildirim = intent.getParcelableExtra("bildirimNesnesi");

        bildirimYoneticisi.notify(1, bildirim);

    }
}

 

14 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
15.02.2023 - 08:00

Merhabalar Yasin, Kodlarınızın genelinde bir hata gözükmüyor. Ancak, bildirim göndermede kullanmak istediğiniz zamanı ayarlamak için yazdığınız onTimeSet() yönteminde takvim örneğinin saat ve dakika ayarlamalarını yaptıktan sonra, bildirimi göndermek için zamanliliBildirimGonder() yöntemini çağırmayı unutmuşsunuz. Bu nedenle, buttonBildirimGonder tıklanmadan önce zamanı ayarlamanız gerekiyor. Bu sorunu çözmek için onTimeSet() yönteminde aşağıdaki değişiklikleri yapabilirsiniz:
 

  1. public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
        calendar.set(Calendar.MINUTE,minute);

        // Bildirimi zamanlayarak gönder
        zamanliliBildirimGonder();
    }