👨‍💻7 Adımda Intent Kullanımı | Nedir Bu Intent? Neden Bilmeliyim?

Ali Osman ARSLAN
Huawei Developers - Türkiye
7 min readApr 18, 2023
Android Intent Kullanımı

Giriş

Merhaba, Android uygulama geliştirirken, farklı Activity’ler arasında geçiş yapmak veya diğer uygulamalarla iletişim kurmak gibi işlemler yapmanız gerekebilir. Bu tür işlemler için Android’de “Intent” adı verilen bir mekanizma kullanılır. Intentler, uygulama bileşenleri arasındaki etkileşimi sağlamak için kullanılan bir mekanizmadır.

Bu makalede, Kotlin dilinde Intent kullanımını açıklayacağız. Ayrıca, birkaç örnek ile Intent kullanımının nasıl yapıldığını göstereceğiz.

Intent Nedir?🙄

Intent, bir uygulama bileşeninin başka bir bileşenle etkileşim kurmasını sağlayan bir mesajdır. Başka bir deyişle, Intent, bir işlemi başlatmak veya bir veri setini diğer bir bileşene göndermek için kullanılan bir nesnedir.

Intent’ler, özellikle Android uygulamaları arasında etkileşim kurmak için kullanılır. Örneğin, bir kullanıcının e-posta uygulamasından bir e-posta göndermek için bir başka uygulamaya ihtiyacı olabilir. Bu durumda, e-posta uygulaması bir Intent oluşturabilir ve göndermek istediği e-posta verilerini bu Intent’e ekleyebilir. Sonrasında, bu Intent, diğer uygulamalardan biri tarafından işlenir ve e-posta gönderme işlemi gerçekleştirilir.

Intent Kavramı

Intent Türleri✌️

Android’de iki farklı Intent türü vardır: explicit (açık) ve implicit (örtülü) Intent’ler.

1. Explicit (Açık) Intent’ler

Explicit Intent’ler, hedef bileşeni (activity, service vb.) belirli bir şekilde açıkça belirtir. Bu tür Intent’ler, bir bileşenin ismi veya bileşenin paket adı ve ismi gibi açık bir hedef belirten bilgiler içerir.

Örneğin, aşağıdaki kod parçasında, MainActivity sınıfından MyOtherActivity sınıfına bir Explicit Intent örneği oluşturulmuştur:

val intent = Intent(this, MyOtherActivity::class.java)
startActivity(intent)
Explicit (Açık) Intent

Bu kod, MainActivity’den MyOtherActivity’ye geçiş yapmak için bir Intent oluşturur ve startActivity() yöntemiyle bu Intent’i başlatır.

2. Implicit (Örtülü) Intent’ler

Implicit Intent’ler genellikle bir eylemi gerçekleştirmek için kullanıcı tarafından seçilen bir uygulama veya bileşenle etkileşim kurmak için kullanılır. Örneğin, bir kullanıcının bir fotoğrafı görüntülemek için bir galeri uygulaması seçmesi durumunda, bu seçim Implicit Intent’e verilir ve uygun uygulama açılır. Örneğin Implicit Intent ile web sayfası açmak:

val intent = Intent("https://www.aliosmanarslan.com/")
intent.data = Uri.parse(getWebSite.toString())
startActivity(intent)
Implicit (Örtülü) Intent

Aşağıdaki kod örneğinde ise bir implicit Intent kullanarak bir resim seçmek için galeri uygulamasının açılması gösterilir:

val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(intent, PICK_IMAGE_REQUEST)

Bu kod parçası, ACTION_PICK eylemi ile MediaStore.Images.Media.EXTERNAL_CONTENT_URI veritabanından bir resim seçmek için implicit bir Intent örneği oluşturur ve startActivityForResult() yöntemiyle başlatır.

Intent Kullanımı🤔

Intent’lerin kullanımı, genellikle başka bir bileşeni açmak, bir eylemi gerçekleştirmek veya bir veri seti göndermek için kullanılır.

1. Başka Bileşen Açmak

Bir Intent kullanarak, bir başka bileşen (activity, service vb.) açılabilir. Aşağıdaki kod parçası, MainActivity sınıfından MyOtherActivity sınıfına geçmek için bir Explicit Intent örneği oluşturur ve startActivity() yöntemiyle başlatır:

val intent = Intent(this, MyOtherActivity::class.java)
startActivity(intent)

2. Bir Eylem Gerçekleştirmek

Bir Intent kullanarak, bir eylem gerçekleştirilebilir. Örneğin, aşağıdaki kod parçası, bir telefon görüşmesi başlatmak için bir Implicit Intent örneği oluşturur:

val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber))
startActivity(intent)

3. Bir Veri Seti Göndermek

Bir Intent kullanarak, bir veri seti diğer bir bileşene gönderilebilir. Aşağıdaki kod parçası, MainActivity sınıfından MyOtherActivity sınıfına bir dize veri seti göndermek için bir Explicit Intent örneği oluşturur:

val intent = Intent(this, MyOtherActivity::class.java)
intent.putExtra("myData", "Hello World!")
startActivity(intent)

Bu kod parçası, myData anahtarıyla “Hello World!” dizesini MyOtherActivity bileşenine gönderir.

4. Kamera Uygulamasını Açma

Bir uygulamada kamera kullanmak istediğinizde, kamera uygulamasını açmak için bir implicit intent kullanabilirsiniz. Örneğin:

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivity(intent)

Bu kod parçası, kamera uygulamasını açmak için MediaStore.ACTION_IMAGE_CAPTURE eylemini kullanarak implicit bir intent örneği oluşturur ve startActivity() yöntemiyle başlatır.

5. Telefon Numarası Arama

Telefon numarası aramak için implicit bir intent kullanabilirsiniz. Örneğin:

val phoneNumber = "1234567890"
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phoneNumber"))
startActivity(intent)

Bu kod parçası, telefon numarası aramak için ACTION_DIAL eylemini kullanarak implicit bir intent örneği oluşturur ve startActivity() yöntemiyle başlatır.

6. Web Sayfasını Açma

Bir web sayfasını açmak için implicit bir intent kullanabilirsiniz. Örneğin:

val webPage = "https://www.aliosmanarslan.com"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(webPage))
startActivity(intent)

Bu kod parçası, web sayfasını açmak için ACTION_VIEW eylemini kullanarak implicit bir intent örneği oluşturur ve startActivity() yöntemiyle başlatır.

7. Veri Alma

Bir uygulamadan başka bir uygulamadan veri alma için explicit bir intent kullanabilirsiniz. Örneğin:

val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "image/*"
startActivityForResult(intent, PICK_IMAGE_REQUEST)

Bu kod parçası, diğer bir uygulamadan bir resim seçmek için ACTION_GET_CONTENT eylemini kullanarak explicit bir intent örneği oluşturur ve startActivityForResult() yöntemiyle başlatır. Seçilen veri, onActivityResult() yöntemi aracılığıyla geri döndürülür.

Intent ile Service

Service, bir arka plandaki işlemi yürütmek için kullanılan bir bileşendir. Intentleri kullanarak, bir Service’i başlatmak ve durdurmak için kullanabilirsiniz. Örneğin, bir medya çalma uygulamasında, bir şarkı çalmak için bir Service kullanabilirsiniz. Aşağıda, Intent ile Service işlemlerinin nasıl yapılacağına dair örnek bir kod parçası bulunmaktadır:

// Service'i başlatmak için bir Intent oluşturun
val intent = Intent(this, MyService::class.java)
startService(intent)

// Service'i durdurmak için bir Intent oluşturun
val intent = Intent(this, MyService::class.java)
stopService(intent)

Bu kod parçası, bir Service’i başlatmak veya durdurmak için Intent kullanmanın örneklerini göstermektedir. “MyService” yerine, uygulamanızda kendi Service sınıfınızın adını kullanabilirsiniz.

Intent ile Broadcast

Broadcast, uygulama içinde veya uygulama dışında yayınlanan bir mesajdır. Intentleri kullanarak, bir BroadcastReceiver bileşenini başlatmak ve yayınlanan bir mesajı dinlemek için kullanabilirsiniz. Örneğin, bir alarm uygulamasında, bir alarmın tetiklenmesi için bir Broadcast kullanabilirsiniz. Aşağıda, Intent ile Broadcast işlemlerinin nasıl yapılacağına dair örnek bir kod parçası bulunmaktadır:

// Bir Broadcast göndermek için bir Intent oluşturun
val intent = Intent("com.example.myapp.MY_ACTION")
sendBroadcast(intent)

// Bir Broadcast almak için bir BroadcastReceiver bileşeni oluşturun
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == "com.example.myapp.MY_ACTION") {
// Broadcast mesajını işleyin
}
}
}

// BroadcastReceiver bileşenini kaydedin
val receiver = MyReceiver()
val filter = IntentFilter("com.example.myapp.MY_ACTION")
registerReceiver(receiver, filter)

// BroadcastReceiver bileşenini kaldırın
unregisterReceiver(receiver)

Bu kod parçası, bir Broadcast göndermek ve almak için Intent kullanmanın örneklerini göstermektedir. “com.example.myapp.MY_ACTION” yerine, uygulamanızda kendi Broadcast mesajınızın adını kullanabilirsiniz. Ayrıca, BroadcastReceiver bileşenini kaydetmek ve kaldırmak için registerReceiver() ve unregisterReceiver() yöntemlerini kullanabilirsiniz.

BroadcastReceiver

IntentFilter

IntentFilter, bir uygulamanın belirli bir Intent’i karşılamaya hazır olduğunu belirtmek için kullanılan bir araçtır. IntentFilter, Intent’in açıklamasını, eylemi ve veri türünü içerebilir.

IntentFilter, bir uygulamanın yayınladığı yayınlar için de kullanılabilir. Broadcast Receiver’lar, IntentFilter’ı kullanarak belirli bir yayın türünü dinleyebilir ve aldıkları yayına göre uygun işlemleri yapabilir.

Örneklerle açıklarsak:

  1. Bir uygulama, diğer uygulamalara “yeni bir fotoğraf yüklendi” bildirimi göndermek istiyor olsun. Bu bildirimi Intent kullanarak yapabilir ve yayın türünü “YENI_FOTO_EKLENDI” olarak tanımlayabilir. Diğer uygulamalar da IntentFilter kullanarak “YENI_FOTO_EKLENDI” yayınlarını dinleyebilirler.
  2. Bir uygulama, kamera uygulamasına veri göndermek istiyor olsun. Bu veri, örneğin bir fotoğraf olsun. Kamera uygulaması, bu veri türünü tanımlayan bir IntentFilter kullanarak bu veriyi kabul edebilir ve belirli bir işlemi yapabilir.
  3. Bir uygulama, telefonunun konumunu belirlemek istiyor olsun. Bu uygulama, GPS verilerini kullanarak konumunu belirleyebilir. Konum belirleme işlemi tamamlandığında, uygulama bir Intent yayını gönderebilir. Bu yayın, belirli bir IntentFilter ile dinleyen uygulamalar tarafından yakalanabilir ve uygun işlemler yapılabilir.

Bu örneklerde IntentFilter, uygulamanın yayınlarını belirli bir formatta tanımlamak ve diğer uygulamaların bu yayınları dinleyebilmesini sağlamak için kullanılmıştır. IntentFilter, Android uygulama geliştirme sürecinde önemli bir araçtır ve farklı senaryolarda kullanılabilecek esnek bir yapıya sahiptir.

Android uygulamaları, yayınların doğru bir şekilde dinlenebilmesi için Broadcast Receiver’ları genellikle AndroidManifest.xml dosyasında kaydederler. Bu dosya, uygulamanın paket bilgileri ve bileşenlerinin yanı sıra, hangi yayınların dinleneceğiyle ilgili bilgileri de içerir. Bu bilgileri tanımlamak için, receiver etiketi kullanılır ve her bir Receiver bileşeni için bir intent-filter tanımlanır.

Örneğin, com.example.MY_ACTION yayın türünü dinlemek için bir Broadcast Receiver kaydetmek istiyorsak, AndroidManifest.xml dosyasında şöyle bir kod parçası kullanabiliriz:

<manifest ... >
<application ... >
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.MY_ACTION" />
</intent-filter>
</receiver>
</application>
</manifest>

Yukarıdaki kod parçasında, MyBroadcastReceiver sınıfı, <receiver> etiketi altında tanımlanmıştır. intent-filter etiketi, com.example.MY_ACTION yayın türünü dinlemek için kullanılmıştır. Bu şekilde, uygulama başlatıldığında, MyBroadcastReceiver sınıfı otomatik olarak com.example.MY_ACTION yayınlarını dinleyecektir.

Günlük Hayattan Kısa Bir Örnek🧐

Hayal edin ki, bir gün arkadaşınız size bir mesaj gönderir ve “Aloha! Bugün Hawaii’de hava nasıl?” diye sorar. Siz de hızlıca bir Intent oluşturursunuz ve “Hawaii Hava Durumu” uygulamasını açarsınız. Ardından, güneşli bir gün olduğunu ve denizde yüzmenin mükemmel olacağını öğrenirsiniz.

Ama iş bitmedi! Siz de arkadaşınıza bir Intent oluşturursunuz ve “Aloha! Hava güzelmiş, seni de buraya bekleriz” diye mesaj atarsınız. Arkadaşınız da hızlıca bir Intent oluşturur ve biletini alıp sizi ziyarete gelir. Siz de birlikte Hawaii’de güneşin altında yüzüp eğlenirsiniz.

Sonuç olarak, Intent’ler sadece Android uygulama geliştirme sürecinde değil, günlük hayatta da oldukça kullanışlı olabilir. İyi tasarlanmış Intent’ler, sizi arkadaşlarınızla güzel anılar biriktirmeye götürebilir. Yani, Intent’leri doğru kullanın ve hayatınızda yeni kapılar açın

ALOHA!

Sonuç🍾

Bu makalede, Kotlin dilinde Intent kullanımını öğrendik. Intent’lerin nasıl kullanılacağını örnekler ile gösterdik. Intent’ler, Android uygulamalarında bileşenler arasındaki etkileşimler için önemli bir mekanizmadır. Bu nedenle, bu konuda iyice anlayıp, doğru bir şekilde kullanmak önemlidir.

Bir sonraki yazımızda görüşürüz👋

Referanslar

--

--