18 Nisan 2017 Salı

İntent ve intent Filter

Arkadaşlar merhaba ,bu yazımda sizlere intent ve intent filter kavramlarından bahsedeceğim.
Android de uygulama bileşenleri diğer android uygulamaları ile etkileşime geçebilir.Bu intent nesneleri ile mümkündür .Android uygulamamızda aktiviteler arası geçiş,yeni aktivite başlatma,yeni bir servis tetiklemek istediğimizde Intent nesnesini kullanırız.Bir aktivite başka bir uygulamadaki aktiviteyi başlatabilir.Örneğin uygulamamıza bir fotoğraf yüklemek için galeriden fotoğraf seçme aktivitesi açılır.Bu şekilde android telefonun sistem özelliklerini uygulamada kullanabildiğimiz gibi telefonda yüklü 3.parti uygulamaların özelliklerini de kendi uygulamamızda kullanabiliriz.Yeni bir aktivite başlatmak için startActivity(intent) methodu kullanılır.Bu method Context nesnesinde tanımlıdır.Aynı uygulama içinde bir Activity başka bir aktiviteyi başlatıyorsa ,başlatılan aktivite alt aktivite (sub -activity )olarak adlandırılır.
 Yeni bir aktivite başlatmak için aşağıdaki kodu kullanmalı ve başlatacağımız yeni aktiviteyi de oluşturmalıyız.Bunun için 
  Geçiş yapılacak aktivite oluşturulur. Kodda hangi isimle çağıracaksak o isim oluşturduğumuz aktivitenin ismi ile aynı olmalıdır.


Intent i = new Intent(getBaseContext(), YeniActivity.class);

startActivity(i);
finish();// Eğer sayfa açıldıktan sonra bu sayfaya tekrar Back butonu ile dönülmesini istemiyorsak finish() metodu ile Activity'i bitirebiliriz.
Aktiviteler arası veri alışverişi Bundle ile sağlanır.
İntent ile servis başlatmak için startService(Intent ) methodu çağrılır.
İki çeşit Intent vardır:
1-Explicit(açık) 
2 implicit(dolaylı)
Explicit intentler: Eğer uygulamada  kullanılmak istenen bileşen açıkça tanımlanmış bir intent ise explicit bir intenttir.Explicit intentlerde Android Sistemin hangi bileşeni çağıracağını açıkça tanımlanması gerekir. Explicit intentler uygulama içinde java sınıfları olarak, uygulamanın geliştiricisi tarafından kontrol edilir. Aşağıda bir explicit intentin nasıl olabileceği gösterilmiştir:
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("Value1", "This value one for ActivityTwo ");
i.putExtra("Value2", "This value two ActivityTwo");
Implicit Intentler: İmplicit intentler gerçekleşmesi istenen eylemi belirtir. İmplicit intent android sisteme gönderildiğinde ,sistem öncelikle belirtilen eylemi gerçekleştirmek için uygun tipteki bütün komponentleri arar.Eğer uygun olan sadece bir tane varsa Android sistem otomatik olarak bu komponenti başlatır.Ama Android sistem tarafından  belirtilen eylem için kullanılacak birden fazla komponent tanımlanmış ise, kullanıcının istediği eylemi gerçekleştirmek için kullanmak istediği komponenti seçmesi için karşısına bir dialog penceresi gelir. Aşağıdaki örnek kodda Android sistemden bir web sayfasını göstermesi istenmektedir.
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(i);
Burada karşımıza önemli bir sorun çıkıyor.Bu belirlenen intentleri gerçekleştirmek için android sistemi,gönderilen intent için hangi komponentin uygun olduğunu nasıl tespit edecek işte burada devreye intent filter girmektedir. Komponentler belirli bir eylem için kayıt edilebilirler.Ayrıca intent filter için ,belirli implicit intentin hangi aktiviteye ait olduğunu da belirtmek gerekir.Bu Android komponentleri static olarak AndroidManifest.xml dosyasına kayıt edilebilir.
Aşağıda AndroidManifest.xml dosyasında tanımlanmış kullanıcının çeşitli tiplerde içerik gönderebilmesi için kullanılacak komponent tanımlanmıştır.

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}
Bir sonraki yazımda Aktivite ve İntent kavramlarını içeren bir örneği uygulamalı olarak anlatacağım.Görüşmek üzere..

Hiç yorum yok:

Yorum Gönder

Yorumunuz için teşekkürler