Merhaba arkadaşlar bu dersimizde Android Service kullanımını yapmış olduğum küçük bir uygulama ile de sizlere anlatmaya çalışacağım. Öncelikle Android Service nedir ,ne işe yarar ve Android Activity lerden farkı nedir onlardan bahsetmek istiyorum.
Android Service class lar aslında arayüzü olmayan activity classlardır. Yani herhangi bir xml dosyasına bağlanıp çalışmazlar. Arayüzleri olmadığı için kullanıcı ile herhangibir bağlantıları olmaz.Android işletim sistemi service class lara activitylere göre daha çok öncelik tanır.Cihazın ram sıkıntısı olduğu durumlarda önce activityleri kapatır sonra serviceleri otomatik kapatmaya başlar. Eğer ram sıkıntısı ortadan kalkarsa kapattığı service leri tekrardan açar. Uygulamayı kapattığınızda bile servisler çalışmaya devam edebilir.
Peki ne amaçla kullanılır derseniz benim için iki önemli amacı vardır. Birincisi uygulama açıkken uzun sürecek işlemleri kullanıcıyı bekletmeden arka planda yapmaya yarar.Mesala uzun sürecek bir post işlemi yada veritabanı işlemini arka planda kullanıcaya belli etmeden servislerde yapabiliriz.İkincisi ise uygulama arka plana alındığında bile çalışmaya devam etmesi.Örneğin mp3 player,radyo yada sunucuyla iletişim.
Benim yazdığım uygulamaya gelcek olursak service Anasayfa activity den açılıp kapanıyor. Service açıkken uygulama açık olsada olmasada her 60 sn de bir sunucuyla iletişime geçip gelen veriyi Notification yardımı ile bize bildiriyor aynı anda service den telefon titretiliyor ve bildirim sesi çalınıyor.Gerekli olan açıklamaları kod üzerinde yapmaya çalıştım.
Arkadaşlar bu dersimde basitce bir notification oluşturdum.Bu oluşturduğum notification Android api 11 üzeri cihazlarda çalışır. Aslında gerçek bir uygulama yazılacak olursa api 11 altı, api 11 ile 16 arası ve api 16 üstü cihazlarda çalışacak şekilde ayrı ayrı yazılması gerekiyor.Ancak burda dersimiz Android Service Kullanımı olduğ için notification kısmı ile çok uğraşmadım. İlerleyen zamanlarda Android Notification ile ilgili başka bir ders yayınlayabilirim.
Şimdi gelelim kodumuza
[wpdm_file id=10]
Anasayfa Activity
import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class Anasayfa extends Activity { Button servisButon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_anasayfa); servisButon = (Button)findViewById(R.id.button1);//Butonu tanımlıyoruz. if(servisCalisiyormu()){//Servis Çalışıyor mu kontrol servisButon.setText("Servisi Durdur"); }else{ servisButon.setText("Servisi Başlat"); } servisButon.setOnClickListener(new View.OnClickListener() {//Buton a clicklistener ekliyoruz @Override public void onClick(View v) { // TODO Auto-generated method stub Log.d("Servis Çalışıyor mu",""+servisCalisiyormu()); if(servisCalisiyormu()){//Servis çalışıyorsa Intent intent = new Intent(getApplicationContext(),NotificationService.class); stopService(intent);//servisi durdurur servisButon.setText("Servisi Başlat"); }else{//Servis çalışmıyorsa Intent intent = new Intent(getApplicationContext(),NotificationService.class); startService(intent);//Servisi başlatır servisButon.setText("Servisi Durdur"); } } }); } public boolean servisCalisiyormu(){//Servis Çalışıyor mu kontrol eden fonksiyon ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if ( NotificationService.class.getName().equals(service.service.getClassName())) { return true; } } return false; } }
Notification Service
import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class NotificationService extends Service{ Context context ; Notification notification; Timer timer; String url = "http://www.mobilhanem.com/test/deneme.php";//post edeceğimiz deneme adresi String cevap; PostClass post = new PostClass(); //Post class ı çağırıyoruz. @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() {//Servis startService(); metoduyla çağrıldığında çalışır context = getApplicationContext(); Toast.makeText(this, "Servis Çalıştı.Bu Mesaj Servis Class'dan", Toast.LENGTH_LONG).show(); timer = new Timer(); timer.schedule(new TimerTask() { //her 60 sn de bir bildirimGonder(); metodu çağırılır. @Override public void run() { bildirimGonder(); } }, 0, 60000); } public void bildirimGonder(){// Burda servis class dan post edip sunucudan aldığımız değeri bildirim gönderiyoruz. List<NameValuePair> params = new ArrayList<NameValuePair>(); //Post edilecek değişkenleri ayarliyoruz. //Bu değişkenler bu uygulamada hiçbir işe yaramıyor.Sadece göstermek amaçlı params.add(new BasicNameValuePair("isim", "taha")); params.add(new BasicNameValuePair("mail", "taha@xxxx.com")); cevap = post.httpPost(url,"POST",params,20000);//sunucudan gelen değeri cevap stringine atıyoruz int icon = R.drawable.ic_launcher;//notificationda gösterilecek icon long when = System.currentTimeMillis();//notificationın ne zaman gösterileceği String baslik = "mobilhanem.com";//notification başlık NotificationManager nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); Intent intent=new Intent(context,Anasayfa.class); PendingIntent pending=PendingIntent.getActivity(context, 0, intent, 0);//Notificationa tıklanınca açılacak activityi belirliyoruz Notification notification; notification = new Notification(icon, "Yeni Bildirim", when); notification.setLatestEventInfo(context,baslik,cevap,pending); notification.flags |= Notification.FLAG_AUTO_CANCEL;//notificationa tıklanınca notificationın otomatik silinmesi için notification.defaults |= Notification.DEFAULT_SOUND;//notification geldiğinde bildirim sesi çalması için notification.defaults |= Notification.DEFAULT_VIBRATE;//notification geldiğinde bildirim titremesi için nm.notify(0, notification); } @Override public void onDestroy() {//Servis stopService(); metoduyla durdurulduğunda çalışır timer.cancel(); Toast.makeText(this, "Servis Durduruldu.Bu Mesaj Servis Class'dan", Toast.LENGTH_LONG).show(); } }
Post Class ı yada HttpPostu nasıl yaptığımı burda anlatmıyorum. Bu konu hakkında detaylı bilgi ve örnek uygulamaları incelemk için buradaki ve buradaki derslerime bakabilirsiniz.
Bu dersimde anlatmak istediklerim bu kadar. Anlamadığınız yerleri sorabilirsiniz.Elimden geldiğince cevap vermeye çalışacağım.Birdahaki dersimizde Android Genymotion Emulatörü kurmayı ve kullanmayı anlatacağım.Yeni dersimizde görüşmek dileğiyle…
Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.
[wpdm_file id=10]
7