Android bildirim kanalı oluşturma | Oreo

Android bildirim kanalı ( Oreo ) ile birlikte gelen “Bildirim Kanalı” özelliği açıklandı. Bu makalemizde bildirim kanalı oluşturacağız ve Oreo yani API 26 dan düşük sürümlerde çalışabilmesi için bildirim kanalı olmayan bildirimlerin kodunu yazmış olacağız.

1 . Android Oreo Sdk‘sını Kurun

İzlemeniz gereken yol Tools > Android > SDK Manager.

Seçmeniz gereken ise Android SDK Platform O ve Google APIs Intel x86 Atom System Image.

2 . Yeni Android Projesi Oluturuyoruz

3 . build.gradle Dosyamızı güncelliyoruz

android {
    compileSdkVersion"android-O"
    buildToolsVersion"26.0.0-rc1"


    defaultConfig {
        applicationId"com.chikeandroid.tutsplusalerts"
        minSdkVersion'O'
        targetSdkVersion'O'
        versionCode1
        versionName"1.0"
        testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"
  }
  ...
}


dependencies {
    ...
    compile'com.android.support:appcompat-v7:26.0.0-alpha1'
    ...
}

4 . Bildirim Kanalını Oluşturuyoruz

public class NotificationUtils extends ContextWrapper { private NotificationManager mManager; public static final String ANDROID_CHANNEL_ID = "com.wy.notifications.ANDROID"; public static final String IOS_CHANNEL_ID = "com.wy.notifications.IOS"; public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL"; public static final String IOS_CHANNEL_NAME = "IOS CHANNEL"; public NotificationUtils(Context base) { super(base); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { createChannels(); String groupId = "channel_group_id101"; CharSequence groupName = "Kanal Ad"; NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName)); } } @RequiresApi(api = Build.VERSION_CODES.O) public void createChannels() { NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID, ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); // Bu Satırda Kanal Oluşturuldu. androidChannel.enableLights(true); // Bildirim ışığının yanıp yanmaması ayarlandı. androidChannel.enableVibration(true); // Bildirim titreşimi ayarlandı androidChannel.setLightColor(Color.GREEN); // Bildirim ışığı rengi ayarlandı androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); // Kilit ekranında bildirim açık olup olmayacağını ayarladık. getManager().createNotificationChannel(androidChannel); NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID, IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); iosChannel.enableLights(true); iosChannel.enableVibration(true); iosChannel.setLightColor(Color.GRAY); iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); getManager().createNotificationChannel(iosChannel); } @RequiresApi(api = Build.VERSION_CODES.O) public Notification.Builder getAndroidChannelNotification(String title, String body) { return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID) .setContentTitle(title) .setContentText(body) .setSmallIcon(android.R.drawable.stat_notify_more) .setAutoCancel(true); } @RequiresApi(api = Build.VERSION_CODES.O) public Notification.Builder getIosChannelNotification(String title, String body) { return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID) .setContentTitle(title) .setContentText(body) .setSmallIcon(android.R.drawable.stat_notify_more) .setAutoCancel(true); } public Notification.Builder getOtherVersionNotification(String title, String body) { return new Notification.Builder(getApplicationContext()) .setContentTitle(title) .setContentText(body) .setSmallIcon(android.R.drawable.stat_notify_more) .setAutoCancel(true); } public NotificationManager getManager() { if (mManager == null) { mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } return mManager; } @RequiresApi(api = Build.VERSION_CODES.O) public void deleteNotificationChannel(String channelId) { NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.deleteNotificationChannel(channelId); } }}

Android sürümü uygun ise kanal kurulumu yapıyoruz.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Eğer android sürümümüz 8 (OREO) ve üzeri ise Kanal oluşturuyoruz.
createChannels();
String groupId = "channel_group_id101";
CharSequence groupName = "Kanal Ad";

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
}

Bildirim kanalları kurulumu

@RequiresApi(api = Build.VERSION_CODES.O)
public void createChannels() {
NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); // Bu Satırda Kanal Oluşturuldu.

androidChannel.enableLights(true); // Bildirim ışığının yanıp yanmaması ayarlandı.
androidChannel.enableVibration(true); // Bildirim titreşimi ayarlandı
androidChannel.setLightColor(Color.GREEN); // Bildirim ışığı rengi ayarlandı
androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); // Kilit ekranında bildirim açık olup olmayacağını ayarladık.
getManager().createNotificationChannel(androidChannel);

NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID, IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
iosChannel.enableLights(true);
iosChannel.enableVibration(true);
iosChannel.setLightColor(Color.GRAY);
iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(iosChannel);
}

Sırası ile ;

  • Android tipi bildirim kanalı,
  • Ios tipi bildirim kanalı,
  • ve daha düşük sürümler için bildirim oluşumu.
@RequiresApi(api = Build.VERSION_CODES.O)
public Notification.Builder getAndroidChannelNotification(String title, String body) { // Bildirim Kanalı kullanan kod.
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

@RequiresApi(api = Build.VERSION_CODES.O)
public Notification.Builder getIosChannelNotification(String title, String body) {// Bildirim Kanalı kullanan kod.
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

public Notification.Builder getOtherVersionNotification(String title, String body) { // Bildirim kanalı kullanmayan daha düşük sürümler için kod.
    return new Notification.Builder(getApplicationContext())
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

5 . Layout kodumuz

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_margin="16dp"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:background="@drawable/linearlayout_background_shadow"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/android_channel"
            android:layout_gravity="center_horizontal"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"/>

        <EditText
            android:id="@+id/activity_main_android_editTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/title"/>

        <EditText
            android:id="@+id/activity_main_android_editContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/content"/>

        <Button
            android:id="@+id/activity_main_android_btnSend"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/send"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:background="@drawable/linearlayout_background_shadow"
        android:orientation="vertical"
        android:layout_marginTop="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/ios_channel"
            android:layout_gravity="center_horizontal"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"/>

        <EditText
            android:id="@+id/activity_main_ios_editTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/title" />

        <EditText
            android:id="@+id/activity_main_ios_editContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/content"/>
        <Button
            android:id="@+id/activity_main_ios_btnSend"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/send"/>
    </LinearLayout>

    <Button
        android:id="@+id/activity_main_btnSetting"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="@string/notification_setting" />
</LinearLayout>

6 . MainActivity kodumuz

public class MainActivity extends AppCompatActivity {

    private EditText android_editTitle , android_editContent , ios_editTitle , ios_editContent;
    private Button android_btnSend , ios_btnSend , btnSetting;
    private NotificationUtils utils;

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

    private void init() {
        utils = new NotificationUtils(this);

        android_editTitle = (EditText) findViewById(R.id.activity_main_android_editTitle);
        android_editContent = (EditText) findViewById(R.id.activity_main_android_editContent);
        ios_editTitle = (EditText) findViewById(R.id.activity_main_ios_editTitle);
        ios_editContent = (EditText) findViewById(R.id.activity_main_ios_editContent);
        android_btnSend = (Button) findViewById(R.id.activity_main_android_btnSend);
        ios_btnSend = (Button) findViewById(R.id.activity_main_ios_btnSend);
        btnSetting = (Button) findViewById(R.id.activity_main_btnSetting);
    }

    private void registerHandlers(){
        btnAndroidTypeSendClick();
        btnIosTypeSendClick();
        btnSettingClick();
    }

    private void btnAndroidTypeSendClick(){
        android_btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = android_editTitle.getText().toString();
                String content = android_editContent.getText().toString();

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(content)) {
                        Notification.Builder nb = utils.getAndroidChannelNotification(title,content);
                        utils.getManager().notify(101, nb.build());
                    }
                } else {
                    setOtherVersionNotification(title,content);
                }
            }
        });
    }

    private void btnIosTypeSendClick(){
        ios_btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = ios_editTitle.getText().toString();
                String content = ios_editContent.getText().toString();

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(content)) {
                        Notification.Builder nb = utils.getIosChannelNotification(title,content);
                        utils.getManager().notify(101, nb.build());
                    }
                } else {
                    setOtherVersionNotification(title,content);
                }
            }
        });
    }

    private void setOtherVersionNotification(String title, String content){ // Android 8 altı sürümlerde bildirim kullanabilmek için bu kodu çalıştırıyoruz.
        Notification.Builder nb = utils.getOtherVersionNotification(title,content);
        utils.getManager().notify(101, nb.build());
    }

    private void btnSettingClick(){
        btnSetting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
                i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
                i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
                startActivity(i);
            }
        });
    }
}
Android Tipi Bildirim Gönderimi
private void btnAndroidTypeSendClick(){ // Android Tipi Bildirim Gönderimi
    android_btnSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String title = android_editTitle.getText().toString();
            String content = android_editContent.getText().toString();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Eğer Oreo veya daha üst sürüm ise channel kullanımı
                if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(content)) {
                    Notification.Builder nb = utils.getAndroidChannelNotification(title,content);
                    utils.getManager().notify(101, nb.build());
                }
            } else { // Değil ise düşük sürümler için kanalsız bildirim oluşumu
                setOtherVersionNotification(title,content);
            }
        }
    });
}

7 . IOS tipi bildirim gönderimi

private void btnIosTypeSendClick(){ // Android Tipi Bildirim Gönderimi
    ios_btnSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String title = ios_editTitle.getText().toString();
            String content = ios_editContent.getText().toString();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Eğer Oreo veya daha üst sürüm ise channel kullanımı
                if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(content)) {
                    Notification.Builder nb = utils.getIosChannelNotification(title,content);
                    utils.getManager().notify(101, nb.build());
                }
            } else { // Değil ise düşük sürümler için kanalsız bildirim oluşumu
                setOtherVersionNotification(title,content);
            }
        }
    });
}

Ve diğer sürümler için bildirim kodumuz ;

private void setOtherVersionNotification(String title, String content){ // Android 8 altı sürümlerde bildirim kullanabilmek için bu kodu çalıştırıyoruz.
    Notification.Builder nb = utils.getOtherVersionNotification(title,content);
    utils.getManager().notify(101, nb.build());
}

[/vc_column_text][vc_column_text]Bildirim Ayarları

private void btnSettingClick(){ // Bildirim Ayarları
    btnSetting.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
            startActivity(i);
        }
    });
}
Photo of author

Mehmet Kurtgöz

Android Developer.

Yorum yapın