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