Android de notification (bildirim) oluşturma

Merhaba arkadaşlar, bu dersimizde Android de bildirim (notification) oluşturmayı ve kullanmayı göreceğiz. Bildirimler mobil uygulamalarda sıklıkla kullanılan yapılardır. Uygulamalar bildirimler sayesinde kullanıcılarla sürekli iletişim kurabilirler. Dahası bazı gelişmiş bildirimlerle uygulamayı açmadan bildirim üzerinden uygulamayla etkileşim kurulabilmektedir. Örneğin resimde görüldüğü gibi bir mesaj geldiği zaman bu mesajı bildirim üzerinde okuyup cevap verebilirsiniz. 

Gelen mesajı bildirim üzerinden cevaplabiliriz

bildirim örneği 

Android de bildirim örnekleri

 

Biz bu dersimizde basit bildirimler oluşturmayı göreceğiz. Bunu da bir uygulama geliştirerek yapalım. Uygulamamızın senaryosu şu şekildedir: 3 edittext nesnesine girilen Ad Soyad, Konu ve Mesaj değerlerini bir butona tıklayarak bildirim şeklinde gösterelim. Daha sonra bildirime tıklayarak bu 3 değeri başka bir activitye gönderip orada ekranda gösterelim. Örnek ekran görüntüleri sayfanın altında paylaşılmıştır.

İşlem adımları: 

1) res/layout/ dizininde activity_main.xml dosyasını oluşturuyoruz. Burada 3 tane edittext, 1 tane de button oluşturuyoruz.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context="com.sdahmet.notification.MainActivity">

    <EditText
        android:id="@+id/edittext_adsoyad"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:hint="Ad Soyad"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/edittext_konu"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:hint="Konu"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/edittext_mesaj"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="25dp"
        android:gravity="top|left"
        android:hint="Mesajınız"
        android:inputType="textMultiLine"
        android:lines="5"
        android:maxLines="5"
        android:minLines="4"
        android:scrollbars="vertical"
        android:textSize="20sp" />

    <Button
        android:id="@+id/button_bildirim_olustur"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ff8800"
        android:padding="10dp"
        android:text="Bildirim Oluştur"
        android:textColor="#FFFFFF"
        android:textSize="20sp"
        android:textStyle="bold" />

</LinearLayout>

2) MainActivity.java dosyamızı oluşturuyoruz. 

package com.sdahmet.notification;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.NotificationCompat;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import static com.sdahmet.notification.R.id.edittext_adsoyad;

public class MainActivity extends AppCompatActivity {

    Button btnBildirimGoster;
    EditText etAdSoyad, etKonu, etMesaj;
    private static final int NOTIF_ID = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // xml sayfasındaki nesnelere ulaşıyoruz.
        initViews();
        btnBildirimGoster.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showNotification();
            }
        });
    }

    private void initViews() {
        btnBildirimGoster = (Button) findViewById(R.id.button_bildirim_olustur);
        etAdSoyad = (EditText) findViewById(edittext_adsoyad);
        etKonu = (EditText) findViewById(R.id.edittext_konu);
        etMesaj = (EditText) findViewById(R.id.edittext_mesaj);
    }

    private void showNotification() {

        /* Bildirime tıkladığımızda SecondActivity.java dosyasına gidebilmek için
           bir intent oluşturuyoruz. Bu intentle birlikte adsoyad, konu ve mesaj
           ve notifId değerlerimizi de gönderiyoruz. */
        Intent resultIntent = new Intent(this, SecondActivity.class);
        resultIntent.putExtra("adsoyad", etAdSoyad.getText().toString());
        resultIntent.putExtra("konu", etKonu.getText().toString());
        resultIntent.putExtra("mesaj", etMesaj.getText().toString());
        resultIntent.putExtra("notifId", NOTIF_ID);

        /* Bildirime tıklayınca iş yapabilmek için PendingIntent sınıfından bir nesne
           üretiyoruz. */
        PendingIntent pendingIntentResult = PendingIntent.getActivity(
                this, NOTIF_ID, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        /* Aşağıda setLargeIcon özelliği bizden bir Bitmap istediği için
           bu şekilde iconumuzu bitmape çeviriyoruz. */
        Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.message);

        /* Bildirim oluşturabilmek için NotificationCompat.Builder ile bir nesne
           üretiyoruz. Üretilen mBuilder nesnesi ile bildirimimizin ayarlarını
           yapıyoruz. */
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setContentTitle(etAdSoyad.getText().toString());
        mBuilder.setContentText(etKonu.getText().toString());
        mBuilder.setSmallIcon(R.drawable.message);
        mBuilder.setLargeIcon(largeIcon);
        mBuilder.setAutoCancel(true);
        mBuilder.addAction(R.drawable.view, "Oku", pendingIntentResult);
        mBuilder.setWhen(System.currentTimeMillis());
        mBuilder.setContentIntent(pendingIntentResult);
        mBuilder.setSubText("Sub text buraya geliyor.");
        mBuilder.setStyle(new NotificationCompat.BigTextStyle()
                .bigText(etMesaj.getText().toString())
                .setBigContentTitle(etKonu.getText().toString()));

        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        mBuilder.setSound(uri);

        long[] v = {500, 1000};
        mBuilder.setVibrate(v);

        // NotificationManager nesnesi oluşturuyoruz.
        NotificationManager notificationManager = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);
        // NotificationManager ile bildirimi inşa ediyoruz.
        notificationManager.notify(NOTIF_ID, mBuilder.build());

        resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_CLEAR_TASK);
    }
}

Bildirim oluşturabilmek için ilk önce PendingIntent sınıfını kullanıyoruz. Bu şekilde bildirime tıklayınca iş yaptırabiliyoruz. Bizden istediği parametreler:

  • Context context: this ile mevcut activityi gönderiyoruz.
  • int requestCode: oluşturacağımız bildirime öncelikle bir ID değeri veriyoruz.
    private static final int NOTIF_ID = 1 ile id değerini 1 veriyoruz. Bu değer daha sonra bildirimi silmek istediğimizde kullanılacağı için önem arz etmektedir.
  • Intent intent: Bildirime tıklanınca ne yapılacağını belirttiğimiz bir intent nesnesi üretip buraya parametre olarak vermemiz gerekiyor. Biz oluşturduğumuz resultIntent nesnesiyle adsoyad, konu, mesaj ve notifid değerlerini SecondActivity.java dosyasına göndereceğimizi belirtiyoruz.
  • int flags: burada özel olarak tanımlanmış sabitleri kullanabileceğimiz gibi biz kendimiz de bir tam sayı değeri girebiliriz.
Intent resultIntent = new Intent(this, SecondActivity.class);
resultIntent.putExtra("adsoyad", etAdSoyad.getText().toString());
resultIntent.putExtra("konu", etKonu.getText().toString());
resultIntent.putExtra("mesaj", etMesaj.getText().toString());
resultIntent.putExtra("notifId", NOTIF_ID);

/*
PendingIntent pendingIntentResult = PendingIntent.getActivity(
                Context context, int requestCode, Intent intent, int flags);
*/

PendingIntent pendingIntentResult = PendingIntent.getActivity(
                this, NOTIF_ID, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Daha sonra NotificationCompat.Builder ile bildirimimizin ayarlamalarını yapıyoruz.

  • mBuilder.setContentTitle(CharSequence title) :  Bildirimin başlığını belirliyoruz. Ad Soyad edittext alanına girdiğimiz değeri gösteriyoruz.
  • mBuilder.setContentText(CharSequence text) : Bildirimin metin alanını belirliyoruz. Konu edittext alanına girdiğimiz değeri gösteriyoruz.
  • mBuilder.setSmallIcon(int icon) : Bildirim geldiğinde bildirim alanında gözüken küçük icondur.  
  • mBuilder.setLargeIcon(Bitmap icon) : Bildirimin içinde sağda gözüken büyük icondur. Parametre olarak Bitmap türünde bir değer alır. O yüzden göstereceğimiz iconu
    Bitmap largeIcon = BitmapFactory.decodeResource(getResources().R.drawable.message) ile Bitmap türüne çeviriyoruz.
  • mBuilder.setAutoCancel(boolean autoCancel) : Kullanıcı panele tıkladığında bildirimin otomatik olarak iptal edilip edilmeyeceğini belirleriz. 
  • mBuilder.addAction(int icon, CharSequence title, PendingIntent intent) : Bildirimin alt kısmında gözüken tıklanıldığı zaman işlem yapmaya yarayan buttonlardır.
  • mBuilder.setWhen(long when) : Bildirimde zaman göstermeye yarar. Parametre olarak System.currentTimeMillis() yazarak anlık zaman bilgisini gösterebiliriz.
  • mBuilder.setContentIntent(PendingIntent intent) : Parametre olarak tanımladığımız pendingIntentResult vererek bildirime tıklanınca yapılacak işlemi belirtiyoruz.
  • mBuilder.setSubText(CharSequence text) : Bildirimde gözüken alt metni oluşturuyoruz. 
  • mBuilder.setStyle(Style style) : Bildirimler genişletildiği zaman gözükecek özellikleri tanımlıyoruz. Bildirim alanı genişletildiği(expand) zaman bigText(CharSequence text) ve setBigContentTitle(CharSequence title) ile sırasıyla mesaj ve konu değerlerimizi gösteriyoruz.
  • mBuilder.setSound(Uri sound) : Bildirim geldiği zaman bir uyarı sesi vermek istersek kullanırız. Parametre olarak Uri nesnesi alır.
    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); ile bu nesneyi üretip parametre olarak setSound fonksiyonuna yazıyoruz.
  • mBuilder.setVibrate(long[] pattern) : Bildirim geldiği zaman titreşim de vermek istersek bu metodu kullanırız. Parametre olarak long tipinde dizi alır. long[] v = {500, 1000}; ile bu diziyi oluşturup parametre olarak setVibrate fonksiyonuna yazıyoruz. 
Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.message);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle(etAdSoyad.getText().toString());
mBuilder.setContentText(etKonu.getText().toString());
mBuilder.setSmallIcon(R.drawable.message);
mBuilder.setLargeIcon(largeIcon);
mBuilder.setAutoCancel(true);
mBuilder.addAction(R.drawable.view, "Oku", pendingIntentResult);
mBuilder.setWhen(System.currentTimeMillis());
mBuilder.setContentIntent(pendingIntentResult);
mBuilder.setSubText("Sub text buraya geliyor.");
mBuilder.setStyle(new NotificationCompat.BigTextStyle()
        .bigText(etMesaj.getText().toString())
        .setBigContentTitle(etKonu.getText().toString()));

Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mBuilder.setSound(uri);

long[] v = {500, 1000};
mBuilder.setVibrate(v);

Son olarak NotificationManager nesnesi üretip, bu nesne ile bildirimimizi tamamlıyoruz.

// NotificationManager nesnesi oluşturuyoruz.
NotificationManager notificationManager = (NotificationManager)
        getSystemService(NOTIFICATION_SERVICE);
// NotificationManager ile bildirimi inşa ediyoruz.
notificationManager.notify(NOTIF_ID, mBuilder.build());

3) res/layout/ dizininde second_activity.xml dosyasını oluşturuyoruz. Burada 6 tane textview nesnesi kullanıyoruz. Bildirime tıkladığımız zaman birinci ekranda edittextlere yazdığımız değerleri bu ekrana gönderip kullaıncıya göstereceğiz. 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ad Soyad: "
            android:textStyle="bold"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/sa_textview_adsoyad"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ahmet Ardahanlı"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp">

        <TextView
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Konu: "
            android:textColor="@color/colorPrimaryDark"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/sa_textview_konu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ahmet Ardahanlı"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp">

        <TextView
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Mesaj: "
            android:textColor="@color/colorPrimaryDark"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/sa_textview_mesaj"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ahmet Ardahanlı"
            android:textSize="20sp" />
    </LinearLayout>

</LinearLayout>

4) SecondActivity.java dosyamızı oluşturuyoruz. 

package com.sdahmet.notification;

import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.TextView;

/**
 * Created by Ahmet Ardahanlı on 15.12.2017.
 */

public class SecondActivity extends Activity {

    TextView tvAdSoyad, tvKonu, tvMesaj;

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

        gelenVerileriAl();

    }

    private void initViews() {
        tvAdSoyad = (TextView) findViewById(R.id.sa_textview_adsoyad);
        tvKonu = (TextView) findViewById(R.id.sa_textview_konu);
        tvMesaj = (TextView) findViewById(R.id.sa_textview_mesaj);
    }

    private void gelenVerileriAl() {

        Intent i = getIntent();
        String adsoyad = i.getStringExtra("adsoyad");
        String konu = i.getStringExtra("konu");
        String mesaj = i.getStringExtra("mesaj");
        int NOTIF_ID = i.getIntExtra("notifId", 1);

        tvAdSoyad.setText(adsoyad);
        tvKonu.setText(konu);
        tvMesaj.setText(mesaj);

        // create notification manager
        NotificationManager notificationManager = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);
        // dismiss notification
        notificationManager.cancel(NOTIF_ID);
    }
}

Burada gelen değerleri textview nesnelerinde göstereceğimiz için 3 tane textview nesnesini oluşturuyoruz. gelenVerileriAl() metodu içerisinde bildirim üzerinden gelen değerleri alabilmek için;

  • Intent i = getIntent(); ile bir intent nesnesi oluşturuyoruz. Daha sonra;
  • String adsoyad = i.getStringExtra("adsoyad");
  • String konu = i.getStringExtra("konu");
  • String mesaj = i.getStringExtra("mesaj");
  • int NOTIF_ID = i.getIntExtra("notifId",1); komutları ile gönderilen değerlere erişim sağlıyoruz.
  • Ulaşılan değerleri textview nesnelerinde gösteriyoruz.
  • NotificationManager sınıfından bir nesne üretiyoruz.
  • notificationManager.cancel(NOTIF_ID); ile daha önce oluşturduğumuz ve id sine 1 değerini verdiğimiz bildirimi kaldırıyoruz.
private void gelenVerileriAl() {

    Intent i = getIntent();
    String adsoyad = i.getStringExtra("adsoyad");
    String konu = i.getStringExtra("konu");
    String mesaj = i.getStringExtra("mesaj");
    int NOTIF_ID = i.getIntExtra("notifId", 1);

    tvAdSoyad.setText(adsoyad);
    tvKonu.setText(konu);
    tvMesaj.setText(mesaj);

    // create notification manager
    NotificationManager notificationManager = (NotificationManager)
            getSystemService(NOTIFICATION_SERVICE);
    // dismiss notification
    notificationManager.cancel(NOTIF_ID);
}

Ekran görüntüleri

      

      

ETİKETLER
android bildirim oluşturmaandroid notification oluşturmaandroid bildirim kullanımıandroid notification kullanımı
Öncekİ Yazı

Android time picker dialog kullanımı

Sonrakİ Yazı

Php de Nesne Yönelimli Programlama - Sınıf yapısı ve kullanımı

İlgili Yazılar