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