Ana sayfa MOBİL DÜNYA Android bildirim kanalı oluşturma | Oreo

Android bildirim kanalı oluşturma | Oreo

174
0

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'
        versionCode 1
        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());
}

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);
        }
    });
}

BİR CEVAP BIRAK

Lütfen bir yorum yazın!
Lütfen Adınızı Girin!