Android Programlama Ders 20: Intent,Intent Filter ve Context

In Mobil, Pratik by Victor CuiumjuLeave a Comment

Android programlama öğrenmeye devam ediyoruz. Bu derste intent,intent filter ve context konularından bahsedeceğiz.

 

Geçen derslerde (№ 19) projemizde aynı uygulamada iki tane etkileşimi oluşturmayı öğrendik. Hatırlatayım yeni etkileşimi oluşturmak için:

–          Yeni klasla beraber superclass android.app.Activity  oluşturuyoruz

–          Etkileşimi Manifest dosyasında kayıt yapmamız gerekiyor. Ve name alanında klasın ismi giriyoruz.

Intent’le ilgili daha ayrıntılı bilgi burada, burada ve burada okuyabilirsiniz.

Şimdi etkileşimi çağırması için kullanılan kodu inceleyelim.

Intent intent = new Intent(this, ActivityTwo.class);
startActivity(intent);

Burada Intent nesneyi kullandık.

Intent (Niyet) nedir ?

Intent bir nesnedir. Nesnenin amacı çağırılacak etkileşimin belirlenmesi. Sonra nesneyi startActivity metodunda kullanıyoruz. Metodun amacı kullanılacak etkileşimi bulmak ve göstermek. Intent nesneyi oluşturduğu zaman Intent (Context packageContext, Class cls) tasarımcı kullandık.

Tasarımcı iki parametre kullanıyor. Birinci parametre –  Context. Context – bir nesnedir amacı   uygulamanın temel metodlara erişim sağlamaktır. Etkileşim Context’in alt klasıdır bu yüzden this parametreyi kullanabiliriz. İlerde örnekleri kullanarak Context’in çağırışı ve kullanımı daha iyi anlayacağız. İkinci parametre – klasın ismidir. Hatırlatayım Manifest dosyada etkileşimi belirlediği zaman klasın ismi giriyoruz. Aynı klası Intent nesnede belirliyoruz. Sistem Manifest dosyaya baktığında uyum tespit ettiği zaman uygun etkileşimi gösterecektir.

Explicit Intent (Açık niyeti)

Açık Intent kullandığımız zaman hangi etkileşimi kullanacağımızı direk belirliyoruz. Yani klasta hangi etkileşimi çağıracağını açık belirliyoruz. Genelde bu tür Intent uygulamanın içinde kullanılıyor. Şematik olarak aşağıdaki resimde gösterebiliriz:

 

ExplicitIntent

 

Burada Intent’i oluşturuyoruz ve parametre olarak Class_B kullanıyoruz. Sonraki adımda startActivity metodu çağırıyoruz ve parametre olarak Intent’i kullanıyoruz. startActivity metodu Manifest dosyayı kontrol ediyor. Kontrolün amacı Class_B’le ilişkili etkileşimi bulmak.

Implicit Intent (Gizli niyeti)

İkinci tür Implicit Intent. Birinci Intent’ten fark parametre olarak klası kullanılmıyor onun yerinde üç tane parametre kullanılır. Bu parametre: action (faaliyet), data (veri) ve category (grup,sınıf). Parametrelere diğerler atanabilir. Değerlere göre etkileşimler çağrılabilir. Mesela: e-posta gönderme, metin düzenleme, resimleri görüntüleme, belli bir telefon numarayı arama ve başkaları. Etkileşim için Intent Filter kullanılır. Intent Filter aynı parametre (action,data ve category) kümesi kullanıyor. Intent’in ve Intent Filter’in parametreleri denk geldiği zaman etkileşim (Activity) çağrılıyor. Arama tüm uygulamalarda gerçekleşiyor. Eğer birkaç tane etkileşim bulunuyorsa hangi uygulamayı kullanmak istediğiniz seçim sunuluyor. Mesela eğer sistemde birkaç tane mp3 çalan uygulama bulunuyorsa mp3 formatlı müzik açıldığı zaman size seçim sunacak. Şematik olarak aşağıdaki resimde gösterebiliriz:

ImplicitIntent

 

Application_1’de Intenti oluşturuyoruz ve action, data ve category parametre dolduruyoruz. Kolaylık sağlamak için parametreleri Param_C olarak isimlendirelim. startActivity kullanarak Intent uygun etkileşimi aramaya başlıyor. Sistemde farklı uygulamalar mevcuttur. Her uygulamada birkaç tane etkileşim bulunuyor. Bazı etkileşimler için IntentFilter belirlenmiş (örnekte Activity_21, Activity_22) bazıları için ise belirlenmemiş (Activity_24). startActivity her etkileşim için Intent’le Intent Filter parametrelerini karşılaştırıyor. Eğer parametreler (Param_C ikisi için) aynı ise etkileşim uygun olarak sayılır.

Sonuç sadece bir etkileşim bulunduysa gösterilir. Birden fazla etkileşim bulunuyorsa o zaman kullanıcı kendine göre daha uygun uygulamayı seçiyor.

 

<activity android:name=”NotesList” android:label=”@string/title_notes_list”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
<intent-filter>
<action android:name=”android.intent.action.VIEW” />
<action android:name=”android.intent.action.EDIT” />
<action android:name=”android.intent.action.PICK” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”vnd.android.cursor.dir/vnd.google.note” />
</intent-filter>
<intent-filter>
<action android:name=”android.intent.action.GET_CONTENT” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”vnd.android.cursor.item/vnd.google.note” />
</intent-filter>
</activity>

Yukarıdaki verdiğim kodda Intent Filter’in uygulanmasını görebilirsiniz.

İlerdeki derslerimizde Intent’lerin uygulanması ve aldığı parametreleri (action, data ve category) örnekleri kullanarak daha iyi anlayacaksınız.

Ders Sonu Notları:

Bu derste Intent nesnenin ne için kullanılıyor temel bilgileri aldık. Sonraki derste Activity LifeCycle  (Etkileşimin yaşam döngüsü) – etkileşimin çağırması, kapanması ve oluşturması zaman davranışı öğreneceğiz.