NotificationManager Sınıfı

Notification işlemleri genel olarak bir programın kullanıcıyı arka planda bir olay oluştuğu zaman bilgilendirme amaçlı kullanılır. Notification işlemleri notificationManager isimli bir sınıf yardımıyla sağlanmaktadır. NotificationManager sınıfının kullanımı API level 11'den itibaren eski model ve yeni model olmak üzere ikiye ayrılmıştır. Birinci model deprecated duruma gelmiştir ancak hala kullanılmaktadır. Eski model kullanımda constructor ile nesne yaratma kullanımı , yeni model kullanım ise Builder tasarım kalıbı ile kullanılmaktadır. İkisi de temelde aynı işi yapmaktadır. Notification işlemleri için genel olarak bir sıra gerektirmektedir.

API LEVEL 11 Öncesi Depricated Notification İşlemleri

(Bu yöntem kullanılmamaktadır sadece bilgi amaçlı yazılmıştır.)

Eski model kullanımda Notification sınıfının constructorları kullanılmaktadır. Programcının izlemesi gereken adımlar şunlardır;

Notification işlemlerinden önce programcının NotificationManager referansı alması gerekir. Bunun için programcı context sınıfının getSystemService isimli metodunu aşağıdaki biçimde çağırmalıdır.

m_notificationManager =(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE)

Bu metot, serviceManager türünden bir referans döndürmektedir, programcının aşağı dönüşüm yapması gerekmektedir.

Bu adımlardan sonra programcı, Notification türünden bir nesne ile yoluna devam etmelidir. Notification türden bir nesne yaratmak için, Notification sınıfının aşağıdaki constructor'ı kullanılabilir.

public Notification (int icon, CharSequence tickerText, long when)

Metodun

  1. parametresi bir icon ID'si(drawable kaynağından kullanılabilir),
  2. parametresi statusBar'da gösterilicek yazı,
  3. parametresi ise ne zaman gösterileceği bilgisidir.

Notification sınıfının constructor kullanımı şu şekildedir;

Notification notification = new Notification(R.drawable.ship, "Bugün kutlama var", System.currentTimeMillis());

Bu adımdan sonra, pendingIntent denilen bir sınıf kullanılmaktadır. PendingIntent sınıfı yapılacak işleme ilişkin arka planda bekleme durumunda olan bir intent'i temsil etmektedir. PendingIntent sınıfı ayrıca bir intent referansı beklemektedir. PendingIntent sınıfının kullanımı aşağıdaki gibidir;

PendingIntent pintent = PendingIntent.getActivity(this, 0,new Intent(this, NotificationActivity.class), 0);

Burada Intent sınıfının getActivity metodundaki 3.parametre kullanıcı Notification'ı tıkladığında açılacak Activity Intetnt'i şeklinde olabilir.

Bu işlemden sonra, Notification sınıfı için bu PendingIntent'in bağlanması gerekmetedir. Bu işlem aşağıdaki gibi yapılabilir;

not.setLatestEventInfo(this, "Bugün kutlama var", "Simit ve içecek var", pintent)

EventInfo metodu aşağıdaki gibi kullanılabilir fakat, setLatestEventInfo metodu, api level 11'den sonra sınıf içerisinden çıkarılmıştır. Sadece API level 11 öncesinde kullanılabilir.

Bu adımlardan sonra, programcı isterse, notification oluşucağı zaman, işlemtim sistemi tarafından çıkartılıcak sesi, ve isterse telefonun titreyip, titremeyeceği gibi durumları da ayarlayabilmektedir. Telefonun titreyebilmesi için, manifest dosyasına android.permission.VIBRATE izni verilmelidir. Titreşim işlemi için, titremenin ne kadar süreyle ve hangi aralıklarla yapılabileceğine ilişkin long türden bir dizi verilmelidir. Bu işlemden sonra, bir Notification numarası verilmelidir. Bir notification'ın sayacı şu şekilde oluşturulabilir;

not.Number = ++m_notificationCount;

Bu sayaç her bir Notification içerisinden elde edilebilir. Kullanıcı notification'a baktığı zaman, notification otomatik olarak cancel edilmek isteniyorsa, flags isimli elemanı not.flag |= Notification.FLAG_AUTO_CANCEL ile OR'lanmalıdır. Bu işlemden sonra NotificationManager'ın notify() isimli metodu ile Notification gönderilebilir. Bu gönderim işlemi sırasında, notify() metodu bir id değeri beklemektedir. Bu ID uygulama içerisinde mümkün olduğunca tekil bırakılmalıdır.

Anahtar Notlar: Java'da dolayısıyla Android'te o anki zamanın long türünden değerini almak için, System.currentTimeMillis() metodu kullanılabilir.

BUILDER KALIBIYLA NOTIFICATION OLUŞTURULMASI

[Dropbox]065-NotificationManagerBuilder

[Dropbox]064-StudentInfoTCPLogin

API_Level_11'den itibaren Notification işlemleri Builder tasarım kalıbına bağlanmıştır. Bunun için Notification nesnesi yaratmak, Notification sınıfının içindeki Builder sınıfıyla yapılabilir.Genel kalıp aşağıdaki gibidir;

Notification.Builder builder = new Notification.Builder(this);

builder.setContentTitle("Kutlama")
       .setContentText("Bugün kutlama var")
       .setSmallIcon(R.drawable.ship)
       .setContentIntent(PendingIntent.getActivity(this, new Intent(this, NotificationActivity.class), 0))
       .setAutoCancel(true)
       .setWhen(System.currentTimeMillis());

Notification notification = builder.build();
m_notificationManager.notify(NOTIFICATION_ID, notification);

Burada zincir şeklinde tüm elemanlar belirlenebilir. setAutoCancel metodu ile kullanıcı Notificationı seçtiği zaman Notification iptal edilir. cancel metodu ile Notification manuel olarak da iptal edilebilir.

064-StudentInfoTCPLogin Ne yapar? Username password ile giriş yapılan login ekranından sonra Öğrenci eklenebilecek bir arayüz ile öğretmenin kendi sınıfına öğrenci ekleyebileceği bir ekranı açar.

Client Server uygulamalarda dikkat edilmesi gereken genel durumlar.

  1. Server tarafta kullanılan veri yapılarına birden fazla Thread tarafından erişilmesi durumunda bu veri yapılarının senkronize edilmesi gerekir.Javada bazı veri yapıları default senkronize durumundadır.Senkronize olmayan veri yapıları için nesne Collections sınıfının syncronizedXXX metodları ile sarmalanarak senkronize edilebilir.Bu kavrama javada bir collectionun ThreadSafe(Thread Güvenli) edilmesi denilmektedir.

  2. Birden fazla Thread'in eriştiği referansların da senkronize edilmesi gerekmektedir.Bunun için nesnenin tamamı senkronize edilir ya da ThreadSafe olması gereken metodlar ayrıca senkronize edilir.

  3. Kullanıcı şifre girişli uygulamalarda kullanıcı ve şifrenin sürekli bağlı kalması bazen iyi bir teknik olmayabilir. Dolasıyla server içerisindeki farklı bir akış belirli zaman aralıklarında bağlı olan kullanıcıları kontrol ederek belirli bir süre işlem yapmayanları bağlı durumdan çıkartabilir.Şüphesiz Whatsapp gibi uygulamalar bir kez username password isteyen uygulamalar olduğu için sürekli bağlı kalması gerekmektedir.Böyle bir uygulamada programın açılması mantıksal bir bağlı olmama durumudur.Aslında Whatsapp programı sürekli servera bağlı olarak yaşamaktadır.