Site icon Mobilhanem

Android Service Kullanımı ve Service HttpPost-Notificaton

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

Exit mobile version