Intent, Intent
nesnesinde gerçekleştirmek istediğiniz bir işlemi (ör. "harita görüntüleme" veya "fotoğraf çekme") tanımlayarak başka bir uygulamada etkinlik başlatmanıza olanak tanır. Bu tür intent, başlatılacak uygulama bileşenini belirtmek yerine bir işlem belirtip işlemi gerçekleştirmek için bazı veriler sağladığı için örtülü intent olarak adlandırılır.
startActivity()
veya startActivityForResult()
'ı çağırıp ona dolaylı bir intent gönderdiğinizde sistem, intent'i çözer ve intent'i işleyebilecek bir uygulamaya yönlendirir. Ardından, ilgili Activity
'i başlatır. Niyeti işleyebilecek birden fazla uygulama varsa sistem, kullanıcıya hangi uygulamanın kullanılacağını seçmesi için bir iletişim kutusu gösterir.
Bu sayfada, yaygın işlemleri gerçekleştirmek için kullanabileceğiniz ve niyeti işleyen uygulamanın türüne göre düzenlenen çeşitli örtülü niyetler açıklanmaktadır. Her bölümde, uygulamanızın işlemi gerçekleştirme özelliğinin reklamını yapmak için nasıl intent filtresi oluşturabileceğiniz de gösterilir.
Dikkat: Cihazda, dolaylı intent alabilen uygulama yoksa startActivity()
çağrısı yapan uygulama kilitlenir. Öncelikle, intent'i alacak bir uygulamanın var olduğunu doğrulamak için Intent
nesnenizde resolveActivity()
işlevini çağırın. Sonuç null değilse intent'i işleyebilecek en az bir uygulama vardır ve startActivity()
çağrısının güvenli olduğu anlamına gelir. Sonuç null ise intent'i kullanmayın ve mümkünse intent'i çağıran özelliği devre dışı bırakın.
Niyet veya niyet filtresi oluşturma hakkında bilginiz yoksa önce Niyetler ve Niyet Filtreleri başlıklı makaleyi okuyun.
Bu sayfada listelenen intent'leri geliştirme barındırıcınızdan nasıl tetikleyeceğinizi öğrenmek için Android Hata Ayıklama Köprüsü ile intent'leri doğrulama bölümüne bakın.
Google Sesli İşlemler
Google Voice, sesli komutlara yanıt olarak bu sayfada listelenen intent'lerden bazılarını tetikler. Daha fazla bilgi için Sistem Sesli İşlemleri'ni kullanmaya başlama başlıklı makaleyi inceleyin.
Çalar saat
Aşağıda, uygulamanızın her bir işlemi gerçekleştirme özelliğinin reklamını yapmak için intent filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere alarm saati uygulamaları için yaygın işlemler verilmiştir.
Alarm oluşturma
Yeni bir alarm oluşturmak için ACTION_SET_ALARM
işlemini kullanın ve aşağıdaki ekstraları kullanarak saat ve mesaj gibi alarm ayrıntılarını belirtin.
Not: Android 2.3 (API düzeyi 9) ve önceki sürümlerde yalnızca saat, dakika ve mesaj ekstraları kullanılabilir. Diğer ekstralar, platformun daha yüksek sürümlerinde kullanılabilir.
- İşlem
ACTION_SET_ALARM
- Veri URI'si
- Yok
- MIME Türü
- Yok
- Ek özellikler
-
EXTRA_HOUR
- Alarmın saati.
EXTRA_MINUTES
- Alarmın dakikası.
EXTRA_MESSAGE
- Alarmı tanımlayan özel bir mesaj.
EXTRA_DAYS
- Bu alarmın tekrarlandığı her hafta gününü içeren bir
ArrayList
. Her gün,Calendar
sınıfından bir tam sayı ile (ör.MONDAY
) belirtilmelidir.Tek seferlik alarmlar için bu ekstra özelliği belirtmeyin.
EXTRA_RINGTONE
- Alarmla birlikte kullanılacak bir zil sesini belirten
content:
URI veya zil sesi yok iseVALUE_RINGTONE_SILENT
.Varsayılan zil sesini kullanmak için bu ekstra özelliği belirtmeyin.
EXTRA_VIBRATE
- Bu alarm için titreşimin etkin olup olmayacağını belirten bir boole değeri.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın alarmı ayarlarken kullanıcı arayüzünü atlaması gerekip gerekmediğini belirten bir boole değeri. Doğru ise uygulama, tüm onay kullanıcı arayüzlerini atlayıp belirtilen alarmı ayarlamalıdır.
Örnek intent:
Kotlin
fun createAlarm(message: String, hour: Int, minutes: Int) { val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ACTION_SET_ALARM
intent'ini çağırmak için uygulamanızın SET_ALARM
iznine sahip olması gerekir:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_ALARM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Zamanlayıcı oluşturma
Geri sayım zamanlayıcı oluşturmak için ACTION_SET_TIMER
işlemini kullanın ve aşağıdaki ek özellikleri kullanarak süre gibi zamanlayıcı ayrıntılarını belirtin.
Not: Bu intent, Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.
- İşlem
ACTION_SET_TIMER
- Veri URI'si
- Yok
- MIME Türü
- Yok
- Ek özellikler
-
EXTRA_LENGTH
- Zamanlayıcının saniye cinsinden uzunluğu.
EXTRA_MESSAGE
- Zamanlayıcıyı tanımlayan özel bir mesaj.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın zamanlayıcıyı ayarlarken kullanıcı arayüzünü atlayıp atlamayacağını belirten bir boole değeri. Doğru ise uygulama, tüm onay kullanıcı arayüzünü atlayıp belirtilen zamanlayıcıyı başlatmalıdır.
Örnek intent:
Kotlin
fun startTimer(message: String, seconds: Int) { val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void startTimer(String message, int seconds) { Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
ACTION_SET_TIMER
intent'ini çağırmak için uygulamanızın SET_ALARM
iznine sahip olması gerekir:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_TIMER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Tüm alarmları göster
Alarm listesini göstermek için ACTION_SHOW_ALARMS
işlemini kullanın.
Bu intent, öncelikle sistem uygulamaları tarafından kullanıldığı için çok fazla uygulama tarafından çağrılmaz. Ancak alarm saati gibi davranan tüm uygulamalar bu intent filtresini uygulayabilir ve mevcut alarmların listesini göstererek yanıt verebilir.
Not: Bu intent, Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.
- İşlem
ACTION_SHOW_ALARMS
- Veri URI'si
- Yok
- MIME Türü
- Yok
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Takvim
Takvim uygulamaları için etkinlik ekleme işlemi yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Takvim etkinliği ekleme
Kullanıcının takvimine yeni bir etkinlik eklemek için ACTION_INSERT
işlemini kullanın ve Events.CONTENT_URI
kullanarak veri URI'sini belirtin.
Ardından, aşağıdaki ekstraları kullanarak çeşitli etkinlik ayrıntılarını belirtebilirsiniz.
- İşlem
ACTION_INSERT
- Veri URI'si
Events.CONTENT_URI
- MIME Türü
"vnd.android.cursor.dir/event"
- Ek özellikler
-
EXTRA_EVENT_ALL_DAY
- Tüm gün süren bir etkinlik olup olmadığını belirten bir boole değeri.
EXTRA_EVENT_BEGIN_TIME
- Etkinliğin başlangıç zamanı (dönemden bu yana geçen milisaniyeler).
EXTRA_EVENT_END_TIME
- Etkinliğin bitiş zamanı (dönemden bu yana geçen milisaniyeler).
TITLE
- Etkinliğin başlığı.
DESCRIPTION
- Etkinlik açıklaması.
EVENT_LOCATION
- Etkinlik konumu.
EXTRA_EMAIL
- Davet edilenleri belirten e-posta adreslerinin virgülle ayrılmış listesi.
CalendarContract.EventsColumns
sınıfında tanımlanan sabitler kullanılarak daha birçok etkinlik ayrıntısı belirtilebilir.
Örnek intent:
Kotlin
fun addEvent(title: String, location: String, begin: Long, end: Long) { val intent = Intent(Intent.ACTION_INSERT).apply { data = Events.CONTENT_URI putExtra(Events.TITLE, title) putExtra(Events.EVENT_LOCATION, location) putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void addEvent(String title, String location, long begin, long end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(Events.TITLE, title) .putExtra(Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.INSERT" /> <data android:mimeType="vnd.android.cursor.dir/event" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kamera
Aşağıda, uygulamanızın her bir işlemi gerçekleştirme özelliğinin reklamını yapmak için intent filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere kamera uygulamaları için yaygın işlemler verilmiştir.
Resim veya video çekip iade etme
Bir kamera uygulamasını açıp sonuçta ortaya çıkan fotoğrafı veya videoyu almak için ACTION_IMAGE_CAPTURE
veya ACTION_VIDEO_CAPTURE
işlemini kullanın. Ayrıca, kameranın fotoğrafı veya videoyu kaydetmesini istediğiniz URI konumunu EXTRA_OUTPUT
ekinde belirtin.
- İşlem
ACTION_IMAGE_CAPTURE
veya
ACTION_VIDEO_CAPTURE
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ek özellikler
-
EXTRA_OUTPUT
- Kamera uygulamasının fotoğraf veya video dosyasını kaydettiği URI konumu (
Uri
nesnesi olarak).
Kamera uygulaması, odağı etkinliğinize başarıyla döndürdüğünde (yani uygulamanız onActivityResult()
geri çağırma işlevini aldığında) EXTRA_OUTPUT
değeriyle belirttiğiniz URI'de fotoğrafa veya videoya erişebilirsiniz.
Not: Fotoğraf çekmek için ACTION_IMAGE_CAPTURE
'yi kullandığınızda kamera, Intent
sonucunda fotoğrafın küçültülmüş bir kopyasını veya küçük resmini de döndürebilir. Bu kopya veya küçük resim, "data"
adlı ek bir alanda Bitmap
olarak kaydedilir.
Örnek intent:
Kotlin
const val REQUEST_IMAGE_CAPTURE = 1 val locationForPhotos: Uri = ... fun capturePhoto(targetFilename: String) { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)) } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") // Do other work with full size photo saved in locationForPhotos. ... } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; static final Uri locationForPhotos; public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelableExtra("data"); // Do other work with full size photo saved in locationForPhotos. ... } }
Android 12 (API düzeyi 31) veya sonraki sürümlerde çalışırken bunu yapmak için aşağıdaki intent örneğine bakın.
Örnek intent:
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Display error state to the user. } } </section></div>
Çıkış konumu için uygun bir Uri
oluşturma da dahil olmak üzere, fotoğraf çekmek için bu intent'in nasıl kullanılacağı hakkında daha fazla bilgi edinmek için Fotoğraf çekme veya Video çekme başlıklı makaleleri inceleyin.
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Bu intent'i işlerken etkinliğinizin, gelen Intent
içinde EXTRA_OUTPUT
ekstrasını kontrol etmesini sağlayın, ardından yakalanan resmi veya videoyu bu ekstra tarafından belirtilen konuma kaydedin ve "data"
adlı bir ekstrada sıkıştırılmış küçük resim içeren bir Intent
ile setResult()
'i arayın.
Kamera uygulamasını fotoğraf modunda başlatma
Bir kamera uygulamasını sabit resim modunda açmak için INTENT_ACTION_STILL_IMAGE_CAMERA
işlemini kullanın.
- İşlem
INTENT_ACTION_STILL_IMAGE_CAMERA
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ek özellikler
- Yok
Örnek intent:
Kotlin
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kamera uygulamasını video modunda başlatma
Bir kamera uygulamasını video modunda açmak için INTENT_ACTION_VIDEO_CAMERA
işlemini kullanın.
- İşlem
INTENT_ACTION_VIDEO_CAMERA
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ek özellikler
- Yok
Örnek intent:
Kotlin
fun capturePhoto() { val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA) if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } }
Java
public void capturePhoto() { Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kişiler/kişiler uygulaması
Aşağıda, uygulamanızın her bir işlemi gerçekleştirme özelliğinin reklamını yapmak için intent filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere, kişi yönetimi uygulamaları için yaygın işlemler verilmiştir.
Kişi seçin
Kullanıcının bir kişi seçmesini ve uygulamanıza tüm iletişim bilgilerine erişim izni vermesini sağlamak için ACTION_PICK
işlemini kullanın ve MIME türünü Contacts.CONTENT_TYPE
olarak belirtin.
onActivityResult()
geri çağırma işlevinize iletilen Intent
sonucu, seçili kişiyi işaret eden content:
URI'yi içerir. Yanıt, uygulamanızda READ_CONTACTS
izni bulunmasa bile uygulamanıza Kişi Sağlayıcı API'yi kullanarak bu kişiyi okumak için geçici izinler verir.
İpucu: Yalnızca belirli bir iletişim bilgisine (ör. telefon numarası veya e-posta adresi) erişmeniz gerekiyorsa belirli iletişim verilerini seçme ile ilgili sonraki bölüme bakın.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Yok
- MIME Türü
Contacts.CONTENT_TYPE
Örnek intent:
Kotlin
const val REQUEST_SELECT_CONTACT = 1 fun selectContact() { val intent = Intent(Intent.ACTION_PICK).apply { type = ContactsContract.Contacts.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { val contactUri: Uri = data.data // Do something with the selected contact at contactUri. //... } }
Java
static final int REQUEST_SELECT_CONTACT = 1; public void selectContact() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { Uri contactUri = data.getData(); // Do something with the selected contact at contactUri. ... } }
Kişi URI'sine sahip olduktan sonra iletişim bilgilerini nasıl alacağınız hakkında bilgi edinmek için Kişinin ayrıntılarını alma başlıklı makaleyi inceleyin.
Bu intent'i kullanarak kişi URI'sini aldığınızda genellikle ilgili kişinin temel ayrıntılarını (ör. görünen ad ve yıldız işareti olup olmadığı) okumak için READ_CONTACTS
izin gerekmez. Ancak belirli bir kişiyle ilgili daha spesifik verileri (ör. telefon numarası veya e-posta adresi) okumaya çalışıyorsanız READ_CONTACTS
iznine ihtiyacınız vardır.
Belirli iletişim verilerini seçme
Kullanıcının bir kişiden telefon numarası, e-posta adresi veya başka bir veri türü gibi belirli bir bilgi seçmesini sağlamak için ACTION_PICK
işlemini kullanın ve MIME türünü aşağıdaki içerik türlerinden birine (ör. CommonDataKinds.Phone.CONTENT_TYPE
) ayarlayarak kişinin telefon numarasını alın.
Not: Birçok durumda, uygulamanızın belirli bir kişiyle ilgili belirli bilgileri görüntülemek için READ_CONTACTS
iznine sahip olması gerekir.
Bir kişiden yalnızca bir tür veri almanız gerekiyorsa ContactsContract.CommonDataKinds
sınıflarından bir CONTENT_TYPE
içeren bu teknik, önceki bölümde gösterildiği gibi Contacts.CONTENT_TYPE
kullanmaya kıyasla daha verimlidir. Sonuç, Kişi Sağlayıcı için daha karmaşık bir sorgu gerçekleştirmenize gerek kalmadan istediğiniz verilere doğrudan erişim sağlar.
onActivityResult()
geri çağırma işlevinize iletilen Intent
sonucu, seçilen iletişim verilerini işaret eden content:
URI'sini içerir. Yanıt, uygulamanızda READ_CONTACTS
izni olmasa bile uygulamanıza bu kişi verilerini okumak için geçici izinler verir.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Yok
- MIME Türü
-
CommonDataKinds.Phone.CONTENT_TYPE
- Telefon numarası olan kişilerden seçim yapın.
CommonDataKinds.Email.CONTENT_TYPE
- E-posta adresi olan kişilerden seçim yapın.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Posta adresi olan kişilerden seçim yapın.
Veya
ContactsContract
altındaki diğer birçokCONTENT_TYPE
değerlerinden birini seçin.
Örnek intent:
Kotlin
const val REQUEST_SELECT_PHONE_NUMBER = 1 fun selectContact() { // Start an activity for the user to pick a phone number from contacts. val intent = Intent(Intent.ACTION_PICK).apply { type = CommonDataKinds.Phone.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { // Get the URI and query the content provider for the phone number. val contactUri: Uri = data.data val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER) contentResolver.query(contactUri, projection, null, null, null).use { cursor -> // If the cursor returned is valid, get the phone number. if (cursor.moveToFirst()) { val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER) val number = cursor.getString(numberIndex) // Do something with the phone number. ... } } } }
Java
static final int REQUEST_SELECT_PHONE_NUMBER = 1; public void selectContact() { // Start an activity for the user to pick a phone number from contacts. Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { // Get the URI and query the content provider for the phone number. Uri contactUri = data.getData(); String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null); // If the cursor returned is valid, get the phone number. if (cursor != null && cursor.moveToFirst()) { int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); String number = cursor.getString(numberIndex); // Do something with the phone number. //... } } }
Bir kişiyi görüntüleme
Bilinen bir kişinin ayrıntılarını görüntülemek için ACTION_VIEW
işlemini kullanın ve intent verileri olarak kişiyi content:
URI'siyle belirtin.
Kişinin URI'sini ilk kez almanın iki temel yolu vardır:
- Önceki bölümde gösterilen
ACTION_PICK
işlemi tarafından döndürülen iletişim URI'sini kullanın. Bu yaklaşım için herhangi bir uygulama izni gerekmez. - Kişiler listesini alma bölümünde açıklandığı gibi, tüm kişilerin listesine doğrudan erişin. Bu yaklaşım için
READ_CONTACTS
izni gerekir.
- İşlem
ACTION_VIEW
- Veri URI Şeması
content:<URI>
- MIME Türü
- Yok. Tür, iletişim URI'sinden anlaşılır.
Örnek intent:
Kotlin
fun viewContact(contactUri: Uri) { val intent = Intent(Intent.ACTION_VIEW, contactUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void viewContact(Uri contactUri) { Intent intent = new Intent(Intent.ACTION_VIEW, contactUri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Mevcut bir kişiyi düzenleme
Bilinen bir kişiyi düzenlemek için ACTION_EDIT
işlemini kullanın, kişiyi intent verileri olarak content:
URI ile belirtin ve bilinen tüm iletişim bilgilerini ContactsContract.Intents.Insert
içindeki sabitlerle belirtilen ekstralara ekleyin.
Kişi URI'sini ilk kez almak için iki temel yöntem vardır:
- Önceki bölümde gösterilen
ACTION_PICK
işlemi tarafından döndürülen iletişim URI'sini kullanın. Bu yaklaşım için herhangi bir uygulama izni gerekmez. - Kişiler listesini alma bölümünde açıklandığı gibi, tüm kişilerin listesine doğrudan erişin. Bu yaklaşım için
READ_CONTACTS
izni gerekir.
- İşlem
ACTION_EDIT
- Veri URI Şeması
content:<URI>
- MIME Türü
- Tür, iletişim kişisi URI'sinden anlaşılır.
- Ek özellikler
- İletişim bilgileri alanlarının doldurulması için
ContactsContract.Intents.Insert
içinde tanımlanan ekstralardan biri veya daha fazlası.
Örnek intent:
Kotlin
fun editContact(contactUri: Uri, email: String) { val intent = Intent(Intent.ACTION_EDIT).apply { data = contactUri putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void editContact(Uri contactUri, String email) { Intent intent = new Intent(Intent.ACTION_EDIT); intent.setData(contactUri); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Bir kişinin nasıl düzenleneceği hakkında daha fazla bilgi edinmek için Niyetleri kullanarak kişileri değiştirme başlıklı makaleyi inceleyin.
Kişi ekleme
Yeni bir kişi eklemek için ACTION_INSERT
işlemini kullanın, MIME türü olarak Contacts.CONTENT_TYPE
'yi belirtin ve bilinen tüm iletişim bilgilerini ContactsContract.Intents.Insert
içindeki sabit değerlerle belirtilen ekstralara ekleyin.
- İşlem
ACTION_INSERT
- Veri URI Şeması
- Yok
- MIME Türü
Contacts.CONTENT_TYPE
- Ek özellikler
ContactsContract.Intents.Insert
içinde tanımlanan ekstralardan biri veya daha fazlası.
Örnek intent:
Kotlin
fun insertContact(name: String, email: String) { val intent = Intent(Intent.ACTION_INSERT).apply { type = ContactsContract.Contacts.CONTENT_TYPE putExtra(ContactsContract.Intents.Insert.NAME, name) putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void insertContact(String name, String email) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType(Contacts.CONTENT_TYPE); intent.putExtra(Intents.Insert.NAME, name); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Kişi ekleme hakkında daha fazla bilgi edinmek için Niyetleri kullanarak kişileri değiştirme başlıklı makaleyi inceleyin.
E-posta
İsteğe bağlı eklerle e-posta oluşturma, e-posta uygulamaları için yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
İsteğe bağlı ekler içeren bir e-posta oluşturma
E-posta oluşturmak için ek ekleyip eklemeyeceğinize bağlı olarak aşağıdaki işlemlerden birini kullanın ve listelenen ek tuşlarla alıcı ve konu gibi e-posta ayrıntılarını ekleyin.
- İşlem
ACTION_SENDTO
(ek yoksa) veya
ACTION_SEND
(tek ek varsa) veya
ACTION_SEND_MULTIPLE
(birden fazla ek varsa)- Veri URI Şeması
- Yok
- MIME Türü
-
"text/plain"
"*/*"
- Ek özellikler
-
Intent.EXTRA_EMAIL
- Tüm "Alıcı" alıcısı e-posta adreslerinin dize dizisi.
Intent.EXTRA_CC
- Tüm "CC" alıcısı e-posta adreslerinin bulunduğu bir dize dizisi.
Intent.EXTRA_BCC
- Tüm "BCC" alıcısı e-posta adreslerinin bulunduğu bir dize dizisi.
Intent.EXTRA_SUBJECT
- E-posta konusunu içeren bir dize.
Intent.EXTRA_TEXT
- E-postanın gövdesini içeren bir dize.
Intent.EXTRA_STREAM
- Eki işaret eden bir
Uri
.ACTION_SEND_MULTIPLE
işlemi kullanılıyorsa bunun yerine birden fazlaUri
nesnesini içeren birArrayList
vardır.
Örnek intent:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { type = "*/*" putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Intent'inizin kısa mesaj veya sosyal uygulama yerine yalnızca bir e-posta uygulaması tarafından işlenmesini istiyorsanız ACTION_SENDTO
işlemini kullanın ve aşağıdaki örnekte gösterildiği gibi "mailto:"
veri şemasını ekleyin:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") // Only email apps handle this. putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // Only email apps handle this. intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Dosya depolama
Aşağıda, dosya depolama uygulamaları için yaygın işlemler ve uygulamanızın her işlemi gerçekleştirme özelliğinin reklamını yapmak üzere intent filtresi oluşturmak için ihtiyaç duyduğunuz bilgiler verilmiştir.
Belirli bir dosya türünü alma
Kullanıcıdan doküman veya fotoğraf gibi bir dosya seçmesini ve uygulamanıza referans döndürmesini istemek için ACTION_GET_CONTENT
işlemini kullanın ve istediğiniz MIME türünü belirtin. Uygulamanıza döndürülen dosya referansı, etkinliğinizin mevcut yaşam döngüsü için geçicidir. Bu nedenle, daha sonra erişmek isterseniz daha sonra okuyabileceğiniz bir kopyasını içe aktarmanız gerekir.
Bu intent, kullanıcının işlem sırasında yeni bir dosya oluşturmasına da olanak tanır. Örneğin, kullanıcı mevcut bir fotoğrafı seçmek yerine kamerayla yeni bir fotoğraf çekebilir.
onActivityResult()
yönteminize iletilen sonuç amacı, dosyayı işaret eden bir URI içeren veriler içerir.
URI, http:
URI, file:
URI veya content:
URI gibi herhangi bir şey olabilir. Ancak, seçilebilir dosyaları yalnızca bir içerik sağlayıcıdan (content:
URI) erişilebilen ve openFileDescriptor()
ile dosya akışı olarak kullanılabilen dosyalarla kısıtlamak istiyorsanız CATEGORY_OPENABLE
kategorisini intent'inize ekleyin.
Android 4.3 (API düzeyi 18) ve sonraki sürümlerde, EXTRA_ALLOW_MULTIPLE
değerini true
olarak ayarlayarak kullanıcının birden fazla dosya seçmesine izin verebilirsiniz.
Ardından, getClipData()
tarafından döndürülen bir ClipData
nesnesinde seçili dosyaların her birine erişebilirsiniz.
- İşlem
ACTION_GET_CONTENT
- Veri URI Şeması
- Yok
- MIME Türü
- Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
- Ek özellikler
-
EXTRA_ALLOW_MULTIPLE
- Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_LOCAL_ONLY
- Döndürülen dosyanın, uzak bir hizmetten indirilmesi gerekmek yerine doğrudan cihazdan erişilebilir olması gerekip gerekmediğini belirten bir boole değeri.
- Kategori (isteğe bağlı)
-
CATEGORY_OPENABLE
openFileDescriptor()
ile dosya akışı olarak temsil edilebilen yalnızca "açılabilir" dosyaları döndürmek için.
Fotoğraf çekmek için örnek intent:
Kotlin
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
Fotoğraf döndürmek için örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumns
andContentResolver.openFileDescriptor()
. --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
Belirli bir dosya türünü açma
Android 4.4 veya sonraki sürümlerde çalışırken ACTION_GET_CONTENT
işlemini kullanarak uygulamanıza içe aktarmanız gereken bir dosyanın kopyasını almak yerine ACTION_OPEN_DOCUMENT
işlemini kullanarak ve bir MIME türü belirterek başka bir uygulama tarafından yönetilen bir dosyayı açma isteğinde bulunabilirsiniz.
Kullanıcının, uygulamanızın yazabileceği yeni bir doküman oluşturmasına da izin vermek için bunun yerine ACTION_CREATE_DOCUMENT
işlemini kullanın.
Örneğin, ACTION_CREATE_DOCUMENT
amacı, mevcut PDF dokümanlarından seçim yapmak yerine kullanıcıların yeni bir doküman oluşturmak istedikleri yeri (ör. dokümanın depolama alanını yöneten başka bir uygulama) seçmesine olanak tanır. Ardından uygulamanız, yeni dokümanı yazabileceği URI konumunu alır.
ACTION_GET_CONTENT
işleminden onActivityResult()
yönteminize iletilen intent herhangi bir türde bir URI döndürebilirken ACTION_OPEN_DOCUMENT
ve ACTION_CREATE_DOCUMENT
'dan gelen sonuç intent'i, seçilen dosyayı her zaman DocumentsProvider
tarafından desteklenen bir content:
URI olarak belirtir. Dosyayı openFileDescriptor()
ile açabilir ve DocumentsContract.Document
'daki sütunları kullanarak ayrıntılarını sorgulayabilirsiniz.
Döndürülen URI, uygulamanıza dosyaya uzun süreli okuma erişimi (veya yazma erişimi de olabilir) verir. ACTION_OPEN_DOCUMENT
işlemi, özellikle mevcut bir dosyayı uygulamanıza kopyalamadan okumak veya dosyayı yerinde açıp düzenlemek istediğinizde yararlıdır.
Ayrıca, intent'e EXTRA_ALLOW_MULTIPLE
ekleyerek ve true
olarak ayarlayarak kullanıcının birden fazla dosya seçmesine izin verebilirsiniz.
Kullanıcı yalnızca bir öğe seçerse öğeyi getData()
adresinden alabilirsiniz.
Kullanıcı birden fazla öğe seçerse getData()
null döndürür ve bunun yerine her öğeyi getClipData()
tarafından döndürülen bir ClipData
nesnesinden almanız gerekir.
Not: Niyetiniz bir MIME türü belirtmeli ve CATEGORY_OPENABLE
kategorisini beyan etmelidir. Uygun durumlarda, EXTRA_MIME_TYPES
ekiyle bir MIME türü dizisi ekleyerek birden fazla MIME türü belirtebilirsiniz. Bu durumda, setType()
içindeki birincil MIME türünü "*/*"
olarak ayarlamanız gerekir.
- İşlem
ACTION_OPEN_DOCUMENT
veya
ACTION_CREATE_DOCUMENT
- Veri URI Şeması
- Yok
- MIME Türü
- Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
- Ek özellikler
-
EXTRA_MIME_TYPES
- Uygulamanızın istediği dosya türlerine karşılık gelen bir MIME türü dizisi. Bu ekstrayı kullandığınızda
setType()
'teki birincil MIME türünü"*/*"
olarak ayarlamanız gerekir. EXTRA_ALLOW_MULTIPLE
- Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_TITLE
- İlk dosya adını belirtmek için
ACTION_CREATE_DOCUMENT
ile birlikte kullanılır. EXTRA_LOCAL_ONLY
- Döndürülen dosyanın, uzak bir hizmetten indirilmesi gerekmek yerine doğrudan cihazdan erişilebilir olması gerekip gerekmediğini belirten bir boole değeri.
- Kategori
-
CATEGORY_OPENABLE
openFileDescriptor()
ile dosya akışı olarak temsil edilebilen yalnızca "açılabilir" dosyaları döndürmek için.
Fotoğraf çekmek için örnek intent:
Kotlin
const val REQUEST_IMAGE_OPEN = 1 fun selectImage2() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) { val fullPhotoUri: Uri = data.data // Do work with full size photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_OPEN = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) { Uri fullPhotoUri = data.getData(); // Do work with full size photo saved at fullPhotoUri. ... } }
Üçüncü taraf uygulamaları, ACTION_OPEN_DOCUMENT
işlemini içeren bir amaca yanıt veremez. Bunun yerine sistem bu intent'i alır ve çeşitli uygulamalarda bulunan tüm dosyaları birleşik bir kullanıcı arayüzünde gösterir.
Uygulamanızın dosyalarını bu kullanıcı arayüzünde sağlamak ve diğer uygulamaların bu dosyaları açmasına izin vermek için bir DocumentsProvider
uygulamanız ve aşağıdaki örnekte gösterildiği gibi PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
) için bir intent filtresi eklemeniz gerekir:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
Uygulamanız tarafından yönetilen dosyaların diğer uygulamalardan nasıl açılacağını öğrenmek için Depolama alanı erişim çerçevesini kullanarak dosyaları açma başlıklı makaleyi okuyun.
Yerel işlemler
Taksi çağırma, yaygın bir yerel işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme yeteneğiyle ilgili reklam yapmak için bir intent filtresi oluşturun.
Araç çağırma
Taksi çağırmak için ACTION_RESERVE_TAXI_RESERVATION
hareketini kullanın.
Not: Uygulamalar bu işlemi tamamlamadan önce kullanıcıdan onay almalıdır.
- İşlem
ACTION_RESERVE_TAXI_RESERVATION
- Veri URI'si
- Yok
- MIME Türü
- Yok
- Ek özellikler
- Yok
Örnek intent:
Kotlin
fun callCar() { val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void callCar() { Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Haritalar
Bir konumu haritada göstermek, harita uygulamaları için yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Bir konumu haritada gösterme
Bir harita açmak için ACTION_VIEW
işlemini kullanın ve intent verilerindeki konum bilgilerini aşağıdaki şemalardan biriyle belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
geo:latitude,longitude
- Haritayı belirtilen boylam ve enlemde gösterin.
Örnek:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Haritayı belirli bir yakınlaştırma düzeyinde, belirtilen boylam ve enlemde gösterin. 1 olan yakınlaştırma seviyesi, belirli lat,lng koordinatında merkezlenmiş olarak Dünya'nın tamamını gösterir. En yüksek (en yakın) yakınlaştırma seviyesi 23'tür.
Örnek:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Haritayı, belirli bir boylam ve enlemde bir dize etiketiyle gösterin.
Örnek:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- "Adres adresim" için konumu gösterin. Bu, belirli bir adres veya konum sorgusu olabilir.
Örnek:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Not:
geo
URI'sinde iletilen tüm dizeler kodlanmış olmalıdır. Örneğin,1st & Pike, Seattle
dizesi1st%20%26%20Pike%2C%20Seattle
olur. Dizedeki boşluklar%20
ile kodlanır veya artı işaretiyle (+
) değiştirilir.
- MIME Türü
- Yok
Örnek intent:
Kotlin
fun showMap(geoLocation: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = geoLocation } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void showMap(Uri geoLocation) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(geoLocation); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="geo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Müzik veya video
Aşağıda, uygulamanızın her bir işlemi gerçekleştirme özelliğinin reklamını yapmak için intent filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere müzik ve video uygulamaları için yaygın işlemler verilmiştir.
Medya dosyası çalma
Bir müzik dosyasını çalmak için ACTION_VIEW
işlemini kullanın ve intent verilerinde dosyanın URI konumunu belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
file:<URI>
content:<URI>
http:<URL>
- MIME Türü
-
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
- Veya uygulamanızın gerektirdiği diğer izinler.
Örnek intent:
Kotlin
fun playMedia(file: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = file } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playMedia(Uri file) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(file); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:type="audio/*" /> <data android:type="application/ogg" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Arama sorgusuna göre müzik çalma
Bir arama sorgusuna göre müzik çalmak için INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
intent'ini kullanın. Bir uygulama, kullanıcının müzik çalma sesli komutuna yanıt olarak bu niyeti tetikleyebilir. Bu intent'in alıcı uygulaması, mevcut içeriği belirtilen sorguyla eşleştirmek için envanterinde bir arama yapar ve bu içeriği oynatmaya başlar.
Bu amaca, amaçlanan arama modunu belirten EXTRA_MEDIA_FOCUS
dizesi ekleyerek ekleyin. Örneğin, arama modu, aramanın sanatçı adı mı yoksa şarkı adı mı olduğunu belirtebilir.
- İşlem
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ek özellikler
-
MediaStore.EXTRA_MEDIA_FOCUS
(zorunlu)-
Arama modunu belirtir: Kullanıcının belirli bir sanatçı, albüm, şarkı veya şarkı listesi aradığını belirtir. Çoğu arama modu ek ücretler alır. Örneğin, kullanıcı belirli bir şarkıyı dinlemek istiyorsa niyete üç ek bilgi eklenebilir: şarkının adı, sanatçısı ve albümü. Bu intent,
EXTRA_MEDIA_FOCUS
değerinin her biri için aşağıdaki arama modlarını destekler:Herhangi biri -
"vnd.android.cursor.item/*"
-
İstediğiniz müziği çalın. Alıcı uygulama, bazı müzikleri akıllı bir seçime göre (ör. kullanıcının dinlediği son oynatma listesi) çalar.
Ek ekstralar:
QUERY
(zorunlu): Boş bir dize. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
Yapılandırılmamış:
"vnd.android.cursor.item/*"
-
Yapılandırılmamış bir arama sorgusundan belirli bir şarkıyı, albümü veya türü çalmak için Uygulamalar, kullanıcının dinlemek istediği içerik türünü tanımlayamadığında bu arama moduyla bir intent oluşturabilir. Mümkün olduğunda daha spesifik arama modları kullanın.
Ek ekstralar:
QUERY
(zorunlu): Sanatçı, albüm, şarkı adı veya türün herhangi bir kombinasyonunu içeren bir dize.
-
Belirli bir türde müzik çal.
Ek ekstralar:
"android.intent.extra.genre"
(zorunlu) - Tür.QUERY
(zorunlu): Tür. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
Sanatçı:
Audio.Artists.ENTRY_CONTENT_TYPE
-
Belirli bir sanatçının müziklerini çalmak
Ek ekstralar:
EXTRA_MEDIA_ARTIST
(zorunlu): Sanatçı."android.intent.extra.genre"
: türe aitQUERY
(zorunlu): Sanatçının veya türün herhangi bir kombinasyonunu içeren bir dize. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
-
Belirli bir albümden müzik çal.
Ek ekstralar:
EXTRA_MEDIA_ALBUM
(zorunlu): albüm.EXTRA_MEDIA_ARTIST
: Sanatçı."android.intent.extra.genre"
: türe aitQUERY
(zorunlu): Albüm veya sanatçının herhangi bir kombinasyonunu içeren bir dize. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
Şarkı:
"vnd.android.cursor.item/audio"
-
Belirli bir şarkıyı çalma
Ek ekstralar:
EXTRA_MEDIA_ALBUM
: albüm.EXTRA_MEDIA_ARTIST
: Sanatçı."android.intent.extra.genre"
: türe aitEXTRA_MEDIA_TITLE
(zorunlu): Şarkı adı.QUERY
(zorunlu): albüm, sanatçı, tür veya başlığın herhangi bir kombinasyonunu içeren bir dize. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
Oynatma listesi:
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Belirli bir şarkı listesini veya ek ekstralar tarafından belirtilen bazı ölçütlere uyan bir şarkı listesini çal.
Ek ekstralar:
EXTRA_MEDIA_ALBUM
: albüm.EXTRA_MEDIA_ARTIST
: Sanatçı."android.intent.extra.genre"
: türe ait"android.intent.extra.playlist"
: Oynatma listesi.EXTRA_MEDIA_TITLE
: Oynatma listesinin temel aldığı şarkının adı.QUERY
(zorunlu): Albüm, sanatçı, tür, şarkı listesi veya başlığın herhangi bir kombinasyonunu içeren bir dize. Bu ekstra, geriye dönük uyumluluk için her zaman sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı, yapılandırılmamış bir arama olarak işleyebilir.
Örnek intent:
Kullanıcı belirli bir sanatçının müziklerini dinlemek isterse arama uygulaması aşağıdaki amacı oluşturabilir:
Kotlin
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Etkinliğinizde bu intent'i işlerken arama modunu belirlemek için gelen EXTRA_MEDIA_FOCUS
ekstrasının değerini kontrol edinIntent
. Etkinliğiniz arama modunu belirledikten sonra, söz konusu arama modu için ek ekstraların değerlerini okuyun.
Bu bilgilerle uygulamanız, arama sorgusuyla eşleşen içeriği oynatmak için envanterinde arama yapabilir. Bu durum aşağıdaki örnekte gösterilmektedir.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS) val query: String? = intent.getStringExtra(SearchManager.QUERY) // Some of these extras might not be available depending on the search mode. val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM) val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST) val genre: String? = intent.getStringExtra("android.intent.extra.genre") val playlist: String? = intent.getStringExtra("android.intent.extra.playlist") val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE) // Determine the search mode and use the corresponding extras. when { mediaFocus == null -> { // 'Unstructured' search mode (backward compatible) playUnstructuredSearch(query) } mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> { if (query?.isNotEmpty() == true) { // 'Unstructured' search mode. playUnstructuredSearch(query) } else { // 'Any' search mode. playResumeLastPlaylist() } } mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> { // 'Genre' search mode. playGenre(genre) } mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Artist' search mode. playArtist(artist, genre) } mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> { // 'Album' search mode. playAlbum(album, artist) } mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> { // 'Song' search mode. playSong(album, artist, genre, title) } mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title) } } } }
Java
protected void onCreate(Bundle savedInstanceState) { //... Intent intent = this.getIntent(); if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS); String query = intent.getStringExtra(SearchManager.QUERY); // Some of these extras might not be available depending on the search mode. String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM); String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST); String genre = intent.getStringExtra("android.intent.extra.genre"); String playlist = intent.getStringExtra("android.intent.extra.playlist"); String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE); // Determine the search mode and use the corresponding extras. if (mediaFocus == null) { // 'Unstructured' search mode (backward compatible). playUnstructuredSearch(query); } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) { if (query.isEmpty()) { // 'Any' search mode. playResumeLastPlaylist(); } else { // 'Unstructured' search mode. playUnstructuredSearch(query); } } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) { // 'Genre' search mode. playGenre(genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) { // 'Artist' search mode. playArtist(artist, genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) { // 'Album' search mode. playAlbum(album, artist); } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) { // 'Song' search mode. playSong(album, artist, genre, title); } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title); } } }
Yeni not
Not oluşturma, not alma uygulamalarında sık kullanılan bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Not oluşturma
Yeni bir not oluşturmak için
ACTION_CREATE_NOTE
işlemini kullanın ve aşağıdaki ekstraları kullanarak konu ve metin gibi not ayrıntılarını belirtin.
Not: Uygulamalar bu işlemi tamamlamadan önce kullanıcıdan onay almalıdır.
- İşlem
-
ACTION_CREATE_NOTE
- Veri URI Şeması
- Yok
- MIME Türü
-
PLAIN_TEXT_TYPE
- "*/*"
- Ek özellikler
-
-
EXTRA_NAME
- Notun başlığını veya konusunu belirten bir dize.
-
EXTRA_TEXT
- Notun metnini belirten bir dize.
-
- İşlem
-
ACTION_DIAL
: Numara çeviriciyi veya telefon uygulamasını açar.ACTION_CALL
: Telefon araması yapar (CALL_PHONE
izni gerekir)
- Veri URI Şeması
-
tel:<phone-number>
voicemail:<phone-number>
- MIME Türü
- Yok
tel:2125551212
tel:(212) 555 1212
- İşlem
-
"com.google.android.gms.actions.SEARCH_ACTION"
- Google Sesli İşlemler'den gelen arama sorgularını destekleyin.
- Ek özellikler
-
QUERY
- Arama sorgusunu içeren bir dize.
- İşlem
ACTION_WEB_SEARCH
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ek özellikler
-
SearchManager.QUERY
- Arama dizesi.
- İşlem
-
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS
Kullanılabilen ek ayar ekranları için
Settings
belgelerine göz atın . - Veri URI Şeması
- Yok
- MIME Türü
- Yok
- İşlem
ACTION_SENDTO
veya
ACTION_SEND
veya
ACTION_SEND_MULTIPLE
- Veri URI Şeması
-
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>
Bu şemaların tümü aynı şekilde ele alınır.
- MIME Türü
-
"text/plain"
"image/*"
"video/*"
- Ek özellikler
-
"subject"
- İletinin konusu için bir dize (genellikle yalnızca MMS için).
"sms_body"
- Kısa mesaj için bir dize.
EXTRA_STREAM
- Eklenecek resmi veya videoyu gösteren
Uri
.ACTION_SEND_MULTIPLE
işlemi kullanılıyorsa bu ek, eklenecek resimleri veya videoları işaret edenUri
nesnelerinin birArrayList
'sidir.
- İşlem
ACTION_VIEW
- Veri URI Şeması
http:<URL>
https:<URL>
- MIME Türü
-
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"
- Geliştirme için bir Android cihaz kurun veya sanal cihaz kullanın.
- Uygulamanızın, desteklemek istediğiniz intent'leri işleyen bir sürümünü yükleyin.
adb
kullanarak intent tetikleme:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
Örnek:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- Gerekli intent filtrelerini tanımlarsanız intent'i işleyin.
Örnek intent:
Kotlin
fun createNote(subject: String, text: String) { val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply { putExtra(NoteIntents.EXTRA_NAME, subject) putExtra(NoteIntents.EXTRA_TEXT, text) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createNote(String subject, String text) { Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE) .putExtra(NoteIntents.EXTRA_NAME, subject) .putExtra(NoteIntents.EXTRA_TEXT, text); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.CREATE_NOTE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity>
Telefon
Telefon uygulamaları için arama başlatma işlemi yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Telefon araması başlatma
Telefon uygulamasını açmak ve bir telefon numarasını çevirmek için ACTION_DIAL
işlemini kullanın ve aşağıdaki URI şemasını kullanarak bir telefon numarası belirtin. Telefon uygulaması açıldığında telefon numarası gösterilir ve kullanıcının telefon görüşmesini başlatmak için Ara düğmesine dokunması gerekir.
Doğrudan telefon araması yapmak için ACTION_CALL
işlemini kullanın ve aşağıdaki URI şemasını kullanarak bir telefon numarası belirtin. Telefon uygulaması açıldığında telefon araması başlar. Kullanıcının Ara düğmesine dokunması gerekmez.
ACTION_CALL
işlemi için manifest dosyanıza CALL_PHONE
iznini eklemeniz gerekir:
<uses-permission android:name="android.permission.CALL_PHONE" />
Geçerli telefon numaraları, IETF RFC 3966'da tanımlanan numaralardır. Geçerli örnekler arasında aşağıdakiler yer alır:
Telefon uygulamasının numara çeviricisi, telefon numaraları gibi şemaları normalleştirme konusunda iyidir. Bu nedenle, açıklanan şema Uri.parse()
yönteminde kesinlikle gerekli değildir.
Ancak, bir şemayı denemediyseniz veya işlenip işlenemeyeceğinden emin değilseniz bunun yerine Uri.fromParts()
yöntemini kullanın.
Örnek intent:
Kotlin
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Arat
Aşağıda, uygulamanızın her bir işlemi gerçekleştirme özelliğinin reklamını yapmak için intent filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere arama uygulamaları için yaygın işlemler verilmiştir.
Belirli bir uygulamayı kullanarak arama yapma
Uygulamanızın bağlamında aramayı desteklemek için aşağıdaki intent filtresi örneğinde gösterildiği gibi uygulamanızda SEARCH_ACTION
işlemini içeren bir intent filtresi tanımlayın.
Not: Uygulama araması için SEARCH_ACTION
kullanmanızı önermeyiz.
Bunun yerine, Google Asistan'ın uygulama içi arama için yerleşik desteğinden yararlanmak üzere GET_THING
işlemini uygulayın. Daha fazla bilgi için Google Asistan Uygulama İşlemleri dokümanlarına bakın.
Örnek intent filtresi:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Web'de arama yapma
Web araması başlatmak için ACTION_WEB_SEARCH
işlemini kullanın ve SearchManager.QUERY
ekstrasında arama dizesini belirtin.
Örnek intent:
Kotlin
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Ayarlar
Uygulamanız kullanıcının bir şeyi değiştirmesini gerektirdiğinde sistem Ayarlar uygulamasında bir ekran açmak için aşağıdaki intent işlemlerinden birini kullanın:
Örnek intent:
Kotlin
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Kısa mesaj kullanımı
Ek içeren bir SMS/MMS mesajı oluşturma, kısa mesajlaşma uygulamaları için yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Ek içeren SMS/MMS mesajı oluşturma
SMS veya MMS kısa mesajı başlatmak için aşağıdaki intent işlemlerinden birini kullanın ve aşağıdaki ek tuşları kullanarak telefon numarası, konu ve mesaj metni gibi mesaj ayrıntılarını belirtin.
Örnek intent:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Intent'inizin diğer e-posta veya sosyal uygulamalar tarafından değil, yalnızca bir kısa mesajlaşma uygulaması tarafından işlenmesini istiyorsanız ACTION_SENDTO
işlemini kullanın ve aşağıdaki örnekte gösterildiği gibi "smsto:"
veri şemasını ekleyin:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(Uri.parse("smsto:")); // Only SMS apps respond to this. intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="text/plain" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Not: SMS/MMS mesajlaşma uygulaması geliştiriyorsanız Android 4.4 ve sonraki sürümlerde varsayılan SMS uygulaması olarak kullanılabilmesi için birkaç ek işlem için intent filtreleri uygulamanız gerekir. Daha fazla bilgi için Telephony
adresindeki dokümanları inceleyin.
Web tarayıcısı
Web URL'si yükleme, web tarayıcısı uygulamaları için yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Web URL'si yükleme
Bir web sayfasını açmak için ACTION_VIEW
işlemini kullanın ve intent verilerinde web URL'sini belirtin.
Örnek intent:
Kotlin
fun openWebPage(url: String) { val webpage: Uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, webpage) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWebPage(String url) { Uri webpage = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, webpage); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <!-- Include the host attribute if you want your app to respond only to URLs with your app's domain. --> <data android:scheme="http" android:host="www.example.com" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The BROWSABLE category is required to get links from web pages. --> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
İpucu: Android uygulamanız web sitenize benzer işlevler sağlıyorsa web sitenize yönlendiren URL'ler için bir intent filtresi ekleyin. Ardından, kullanıcıların uygulamanızı yüklemiş olması durumunda, e-postalardaki veya web sitenize yönlendiren diğer web sayfalarındaki bağlantılar, web sayfanız yerine Android uygulamanızı açar. Android uygulama bağlantılarını kullanma başlıklı makalede daha fazla bilgi edinin.
Android 12'den (API düzeyi 31) itibaren, genel bir web intent'i yalnızca uygulamanız söz konusu web intent'inde yer alan belirli bir alan için onaylanmışsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan için onaylanmamışsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Android Debug Bridge ile intent'leri doğrulama
Uygulamanızın, desteklemek istediğiniz intent'lere yanıt verdiğini doğrulamak için aşağıdakileri yaparak belirli intent'leri tetiklemek üzere adb
aracını kullanabilirsiniz:
Daha fazla bilgi için Kabuk komutları verme bölümüne bakın.