Intent, bir Intent
nesnesinde "harita görüntüle" veya "resim çek" gibi gerçekleştirmek istediğiniz bir işlemi açıklayarak başka bir uygulamada etkinlik başlatmanıza olanak tanır. Bu amaç türü, başlatılacak uygulama bileşenini belirtmediği, bunun yerine bir eylem belirttiği ve işlemi gerçekleştirecek bazı veriler sağladığı için dolaylı niyet olarak adlandırılır.
startActivity()
veya startActivityForResult()
yöntemini çağırıp örtülü bir amaç ilettiğinizde sistem, amacı işleyebilecek bir uygulama olarak amacı çözümler ve ilgili Activity
işlemini başlatır. Amacı işleyebilecek birden fazla uygulama varsa sistem, kullanıcıya kullanılacak uygulamayı seçmesi için bir iletişim kutusu sunar.
Bu sayfada, yaygın işlemleri gerçekleştirmek için kullanabileceğiniz çeşitli örtülü amaçlar, amacı gerçekleştiren uygulama türüne göre düzenlenmiş olarak açıklanmaktadır. Ayrıca her bölümde, uygulamanızın işlemi gerçekleştirme yeteneğinin reklamını yapmak için nasıl niyet filtresi oluşturabileceğiniz gösterilmektedir.
Dikkat: Cihazda dolaylı bir niyet alabilen uygulama yoksa uygulama startActivity()
çağırdığında kilitlenir. Öncelikle bir uygulamanın amacı almak üzere var olduğunu doğrulamak için Intent
nesnenizde resolveActivity()
işlevini çağırın. Sonuç null değilse amacı işleyebilecek en az bir uygulama vardır ve startActivity()
yöntemini çağırmak güvenlidir. Sonuç null ise intent'i kullanmayın ve mümkünse amacı çağıran özelliği devre dışı bırakın.
Niyetler veya intent filtreleri oluşturma hakkında bilginiz yoksa önce Niyetler ve Amaç Filtreleri bölümünü okuyun.
Bu sayfada listelenen amaçları geliştirme ana makinenizden nasıl etkinleştireceğinizi öğrenmek için Amaçları Android Debug Bridge ile doğrulama bölümüne bakın.
Google Sesli İşlemler
Google Sesli İşlemler, sesli komutlara yanıt olarak bu sayfada listelenen amaçlardan bazılarını tetikler. Daha fazla bilgi için Sistem Sesli İşlemlerini Kullanmaya Başlama bölümüne bakın.
Çalar saat
Aşağıda, çalar saat uygulamaları için genel işlemler verilmiştir. Bu işlemler arasında, uygulamanızın her bir işlemi gerçekleştirme yeteneğinin reklamını yapmak üzere bir amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunur.
Alarm oluşturma
Yeni bir alarm oluşturmak için ACTION_SET_ALARM
işlemini kullanın ve aşağıdaki ekstra özellikleri 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ı mevcuttur. Diğer ekstralar, platformun yüksek sürümlerinde mevcuttur.
- İşlem
ACTION_SET_ALARM
- Veri URI'si
- Hiçbiri
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_HOUR
- Alarmın saati.
EXTRA_MINUTES
- Alarmın dakikası.
EXTRA_MESSAGE
- Alarmı tanımlamak için kullanılan özel bir mesaj.
EXTRA_DAYS
- Bu alarmın tekrarlandığı haftanın her günü dahil bir
ArrayList
. Her gün,Calendar
sınıfından bir tam sayı ile tanımlanmalıdır (ör.MONDAY
).Tek seferlik alarm için bunu fazla olarak belirtmeyin.
EXTRA_RINGTONE
- Alarmla kullanılacak zil sesini belirten bir
content:
URI'sı veya zil sesi olmaması içinVALUE_RINGTONE_SILENT
.Varsayılan zil sesini kullanmak için bunu fazla olarak belirtmeyin.
EXTRA_VIBRATE
- Bu alarm için titreşip titreşmeyeceğini belirten boole.
EXTRA_SKIP_UI
- Alarm kurulurken yanıt veren uygulamanın kullanıcı arayüzünü atlayıp atlamayacağını belirten boole değeri. Doğru değerine ayarlanırsa uygulamanın onay kullanıcı arayüzünü atlaması ve belirtilen alarmı ayarlaması gerekir.
Örnek amaç:
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
amacını ç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 ekstraları kullanarak süre gibi zamanlayıcı ayrıntılarını belirtin.
Not: Bu amaç, Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.
- İşlem
ACTION_SET_TIMER
- Veri URI'si
- Hiçbiri
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_LENGTH
- Zamanlayıcının saniye cinsinden uzunluğu.
EXTRA_MESSAGE
- Zamanlayıcıyı tanımlayan özel bir mesaj
EXTRA_SKIP_UI
- Zamanlayıcı ayarlanırken yanıt veren uygulamanın, kullanıcı arayüzünü atlayıp atlamayacağını belirten boole değeridir. Doğru değerine ayarlanırsa uygulamanın onay kullanıcı arayüzünü atlaması ve belirtilen zamanlayıcıyı başlatması gerekir.
Örnek amaç:
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
amacını ç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
Alarmların listesini göstermek için ACTION_SHOW_ALARMS
işlemini kullanın.
Bu amacın öncelikli olarak sistem uygulamaları tarafından kullanıldığından çok fazla uygulama olmasa da çalar saat gibi davranan tüm uygulamalar bu amaç filtresini uygulayıp mevcut alarmların listesini göstererek yanıt verebilir.
Not: Bu amaç, Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.
- İşlem
ACTION_SHOW_ALARMS
- Veri URI'si
- Hiçbiri
- 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
Etkinlik eklemek, takvim uygulamaları için genel bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak 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 ekstra özellikleri kullanarak çeşitli etkinlik ayrıntıları belirtebilirsiniz.
- İşlem
ACTION_INSERT
- Veri URI'si
Events.CONTENT_URI
- MIME Türü
"vnd.android.cursor.dir/event"
- Ekstralar
-
EXTRA_EVENT_ALL_DAY
- Bunun tüm gün süren bir etkinlik olup olmadığını belirten boole değeridir.
EXTRA_EVENT_BEGIN_TIME
- Etkinliğin başlangıç zamanı (epoch'tan beri geçen milisaniye).
EXTRA_EVENT_END_TIME
- Etkinliğin bitiş zamanı (epoch'tan beri geçen milisaniye).
TITLE
- Etkinlik başlığı.
DESCRIPTION
- Etkinlik açıklaması.
EVENT_LOCATION
- Etkinlik konumu.
EXTRA_EMAIL
- Davetlileri belirten e-posta adreslerinin virgülle ayrılmış listesi.
CalendarContract.EventsColumns
sınıfında tanımlanan sabit değerler kullanılarak daha fazla etkinlik ayrıntısı belirtilebilir.
Örnek amaç:
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ştirebilme olanağını tanıtmak amacıyla bir intent filtresi oluşturmak için ihtiyacınız olan bilgiler de dahil olmak üzere, kamera uygulamaları için yaygın olarak yapılan işlemler verilmiştir.
Çektiğiniz fotoğraf veya videoyu iade etme
Bir kamera uygulaması açıp görüntülenen fotoğraf veya videoyu almak için ACTION_IMAGE_CAPTURE
veya ACTION_VIDEO_CAPTURE
işlemini kullanın. Ayrıca, EXTRA_OUTPUT
ekstra bölümünde kameranın fotoğrafı veya videoyu kaydetmesini istediğiniz URI konumunu da belirtin.
- İşlem
ACTION_IMAGE_CAPTURE
veya
ACTION_VIDEO_CAPTURE
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
-
EXTRA_OUTPUT
- Kamera uygulamasının fotoğrafı veya video dosyasını
Uri
nesnesi olarak kaydettiği URI konumu.
Kamera uygulaması, odağı etkinliğinize başarıyla döndürdüğünde (başka bir deyişle uygulamanız onActivityResult()
geri çağırmasını alırsa) EXTRA_OUTPUT
değeriyle belirttiğiniz URI'de fotoğrafa veya videoya erişebilirsiniz.
Not: Fotoğraf çekmek için ACTION_IMAGE_CAPTURE
kullandığınızda kamera, Intent
sonucundaki fotoğrafın "data"
adlı ekstra bir alanda Bitmap
olarak kaydedilmiş, küçültülmüş bir kopyasını veya küçük resmini de döndürebilir.
Örnek amaç:
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 amaç:
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 üzere bu amacın nasıl kullanılacağı hakkında daha fazla bilgi için Fotoğraf çekme veya Video çekme bölümlerini okuyun.
Ö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 amacı işlerken, gelen Intent
içinde EXTRA_OUTPUT
ekstra öğe olup olmadığını kontrol etmek için etkinliğinizi kontrol edin, ardından yakalanan görüntü veya videoyu bu ekstra tarafından belirtilen konuma kaydedin ve "data"
adlı ekstra bir öğe içinde sıkıştırılmış küçük resim içeren Intent
ile setResult()
çağrısı yapın.
Hareketsiz görüntü modunda kamera uygulaması başlatma
Bir kamera uygulamasını hareketsiz resim modunda açmak için INTENT_ACTION_STILL_IMAGE_CAMERA
işlemini kullanın.
- İşlem
INTENT_ACTION_STILL_IMAGE_CAMERA
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
- Yok
Örnek amaç:
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>
Video modunda kamera uygulaması 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ı
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
- Yok
Örnek amaç:
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 yeteneğinin reklamını yapmak üzere bir amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de dahil olmak üzere kişi yönetimi uygulamaları için yaygın olarak gerçekleştirilen işlemler verilmiştir.
Kişi seçin
Kullanıcının bir kişi seçmesini ve uygulamanızın tüm kişi bilgilerine erişmesini sağlamak için ACTION_PICK
işlemini kullanarak MIME türünü Contacts.CONTENT_TYPE
olarak belirtin.
onActivityResult()
geri çağırmanıza teslim edilen Intent
sonucu, seçilen kişiye işaret eden content:
URI'sını içerir. Bu yanıt, uygulamanız READ_CONTACTS
iznini içermese bile Contact Provider API'sini kullanarak uygulamanıza bu kişiyi okuması için geçici izinler verir.
İpucu: Telefon numarası veya e-posta adresi gibi yalnızca belirli bir iletişim bilgisi parçasına erişmeniz gerekiyorsa belirli iletişim verilerini seçme konulu bir sonraki bölüme bakın.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Hiçbiri
- MIME Türü
Contacts.CONTENT_TYPE
Örnek amaç:
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'sini aldıktan sonra kişi ayrıntılarını alma hakkında bilgi için Kişinin ayrıntılarını alma bölümünü okuyun.
Bu intent'i kullanarak kişi URI'sini aldığınızda genellikle söz konusu kişiyle ilgili temel ayrıntıları (ör. görünen ad ve kişinin yıldızlı olup olmadığı) okumak için READ_CONTACTS
iznine ihtiyacınız yoktur. Ancak belirli bir kişiyle ilgili telefon numarası veya e-posta adresi gibi daha ayrıntılı verileri okumaya çalışıyorsanız READ_CONTACTS
iznine ihtiyacınız vardır.
Belirli iletişim verilerini seçin
Kullanıcının bir kişiden telefon numarası, e-posta adresi veya diğer veri türü gibi belirli bir bilgiyi seçmesini sağlamak için ACTION_PICK
işlemini kullanın ve kişinin telefon numarasını almak için MIME türünü aşağıdaki içerik türlerinden birine (ör. CommonDataKinds.Phone.CONTENT_TYPE
) belirtin.
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 veri türünü almanız gerekiyorsa önceki bölümde gösterildiği gibi ContactsContract.CommonDataKinds
sınıflarından CONTENT_TYPE
içeren bu teknik, Contacts.CONTENT_TYPE
kullanmaktan daha etkilidir. Sonuç olarak, Contact Provider'a daha karmaşık bir sorgu gerçekleştirmenize gerek kalmadan istediğiniz verilere doğrudan erişebilirsiniz.
onActivityResult()
geri çağırmanıza teslim edilen Intent
sonucu, seçilen kişi verilerini işaret eden content:
URI'sını içerir. Bu yanıt, uygulamanız READ_CONTACTS
iznini içermese bile uygulamanıza bu kişi verilerini okuması için geçici izinler verir.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Hiçbiri
- 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şiler arasından seçim yapın.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Posta adresi olan kişilerden seçim yapın.
Dilerseniz
ContactsContract
altındaki diğer birçokCONTENT_TYPE
değerinden birini de seçebilirsiniz.
Örnek amaç:
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. //... } } }
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 amaç verisi olarak content:
URI'sına sahip kişiyi belirtin.
Kişinin URI'sını ilk olarak almanın iki temel yolu vardır:
- Önceki bölümde gösterilen
ACTION_PICK
işleminin döndürdüğü kişi URI'sini kullanın. Bu yaklaşım için herhangi bir uygulama izni gerekmez. - Kişi listesini alma bölümünde açıklandığı gibi, tüm kişilerin listesine doğrudan erişme. Bu yaklaşım için
READ_CONTACTS
izni gerekir.
- İşlem
ACTION_VIEW
- Veri URI Şeması
content:<URI>
- MIME Türü
- Yok. Tür, kişi URI'sinden tahmin edilir.
Örnek amaç:
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, amaç verisi olarak kişiyi content:
URI'sı ile belirtin ve bilinen iletişim bilgilerini ContactsContract.Intents.Insert
içindeki sabit değerler tarafından belirtilen ekstralara ekleyin.
Kişi URI'sını ilk olarak almanın iki temel yolu vardır:
- Önceki bölümde gösterilen
ACTION_PICK
işleminin döndürdüğü kişi URI'sini kullanın. Bu yaklaşım için herhangi bir uygulama izni gerekmez. - Kişi listesini alma bölümünde açıklandığı gibi, tüm kişilerin listesine doğrudan erişme. Bu yaklaşım için
READ_CONTACTS
izni gerekir.
- İşlem
ACTION_EDIT
- Veri URI Şeması
content:<URI>
- MIME Türü
- Tür, kişi URI'sinden tahmin edilir.
- Ekstralar
- İletişim ayrıntılarının alanlarını doldurabilmeniz için
ContactsContract.Intents.Insert
politikasında tanımlanan bir veya daha fazla ek özellik.
Örnek amaç:
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); } }
Kişileri düzenleme hakkında daha fazla bilgi edinmek için Amaçları kullanarak kişileri değiştirme başlıklı makaleyi okuyun.
Kişi ekle
Yeni bir kişi eklemek için ACTION_INSERT
işlemini kullanın, MIME türü olarak Contacts.CONTENT_TYPE
değerini belirtin ve ContactsContract.Intents.Insert
değişkenindeki sabit değerler tarafından belirtilen ekstra özelliklere bilinen tüm kişi bilgilerini ekleyin.
- İşlem
ACTION_INSERT
- Veri URI Şeması
- Hiçbiri
- MIME Türü
Contacts.CONTENT_TYPE
- Ekstralar
ContactsContract.Intents.Insert
politikasında tanımlanan ek özelliklerden biri veya daha fazlası.
Örnek amaç:
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 için Niyetleri kullanarak kişileri değiştirme konusunu okuyun.
E-posta
İsteğe bağlı ekleri olan bir e-posta oluşturmak, e-posta uygulamaları için yaygın olarak kullanılan bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak bir intent filtresi oluşturun.
İsteğe bağlı ekler içeren bir e-posta oluşturma
E-posta oluşturmak için ekleri dahil edip etmemenize bağlı olarak aşağıdaki işlemlerden birini kullanın ve listelenen ekstra anahtarları kullanarak alıcı ve konu gibi e-posta ayrıntılarını ekleyin.
- İşlem
ACTION_SENDTO
(ek için) veya
ACTION_SEND
(tek bir ek için) veya
ACTION_SEND_MULTIPLE
(birden fazla ek için)- Veri URI Şeması
- Hiçbiri
- MIME Türü
-
"text/plain"
"*/*"
- Ekstralar
-
Intent.EXTRA_EMAIL
- Tüm "Alıcı" alıcı e-posta adreslerinden oluşan bir dize dizisi.
Intent.EXTRA_CC
- Tüm "CC" alıcı e-posta adreslerini içeren bir dize dizisi.
Intent.EXTRA_BCC
- Tüm "BCC" alıcı e-posta adreslerini içeren bir dize dizisi.
Intent.EXTRA_SUBJECT
- E-posta konusunu içeren bir dize.
Intent.EXTRA_TEXT
- E-posta gövdesini içeren bir dize.
Intent.EXTRA_STREAM
- Eki işaret eden bir
Uri
.ACTION_SEND_MULTIPLE
işlemi kullanılıyorsa bu, birden fazlaUri
nesnesi içeren birArrayList
öğesidir.
Örnek amaç:
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); } }
Niyetinizin bir kısa mesaj veya sosyal uygulama tarafından değil, yalnızca bir e-posta uygulaması tarafından işlendiğinden emin olmak 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 olarak yapılan işlemler verilmiştir. Bu işlemler arasında, uygulamanızın her bir işlemi gerçekleştirebilme olanağının reklamını yapmak üzere bir intent filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunur.
Belirli bir dosya türünü alma
Kullanıcıdan doküman veya fotoğraf gibi bir dosya seçip uygulamanıza bir referans göndermesini istemek için ACTION_GET_CONTENT
işlemini kullanarak istediğiniz MIME türünü belirtin. Uygulamanıza döndürülen dosya referansı, etkinliğinizin mevcut yaşam döngüsüne bağlı olarak geçicidir. Bu nedenle, ona daha sonra erişmek isterseniz daha sonra okuyabileceğiniz bir kopyayı 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'ye sahip veriler içerir.
URI; http:
URI'sı, file:
URI'sı veya content:
URI'sı gibi herhangi bir değer olabilir. Ancak seçilebilir dosyaları yalnızca bir içerik sağlayıcıdan erişilebilen (content:
URI'sı) ve openFileDescriptor()
ile dosya akışı olarak kullanılabilen dosyalarla kısıtlamak istiyorsanız amacınıza CATEGORY_OPENABLE
kategorisini ekleyin.
Android 4.3 (API düzeyi 18) ve sonraki sürümlerde, true
olarak ayarlanan amaca EXTRA_ALLOW_MULTIPLE
ekleyerek kullanıcının birden fazla dosya seçmesine de izin verebilirsiniz.
Böylece, getClipData()
tarafından döndürülen bir ClipData
nesnesindeki seçili dosyaların her birine erişebilirsiniz.
- İşlem
ACTION_GET_CONTENT
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
- Ekstralar
-
EXTRA_ALLOW_MULTIPLE
- Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini tanımlayan boole değeridir.
EXTRA_LOCAL_ONLY
- Döndürülen dosyanın uzak bir hizmetten indirilmesini gerektirmek yerine, doğrudan cihazdan kullanılabilir olması gerekip gerekmediğini belirten boole değeridir.
- Kategori (isteğe bağlı)
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak temsil edilebilen "açılabilir" dosyaları döndürmek için.
Fotoğraf çekmek için örnek amaç:
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
Uygulamanıza aktarmanız gereken bir dosyanın kopyasını almak yerine, Android 4.4 veya sonraki bir sürümde çalışırken ACTION_GET_CONTENT
işlemini kullanarak bunun yerine ACTION_OPEN_DOCUMENT
işlemini kullanıp bir MIME türü belirterek başka bir uygulama tarafından yönetilen bir dosyayı açmayı isteyebilirsiniz.
Kullanıcının, uygulamanızın üzerinde 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ı arasından seçim yapmak yerine, kullanıcıların yeni doküman oluşturmak istedikleri yeri seçebilmelerini sağlar (örneğin, dokümanın depolama alanını yöneten başka bir uygulama içinde). Uygulamanız daha sonra yeni belgeyi yazabileceği URI konumunu alır.
ACTION_GET_CONTENT
işleminden onActivityResult()
yönteminize iletilen amaç herhangi bir türde URI döndürebilir. Ancak, ACTION_OPEN_DOCUMENT
ve ACTION_CREATE_DOCUMENT
kaynaklı sonuç amacı, seçilen dosyayı her zaman DocumentsProvider
destekli bir content:
URI'sı olarak belirtir. Dosyayı openFileDescriptor()
ile açabilir ve DocumentsContract.Document
sütunlarını kullanarak ayrıntılarını sorgulayabilirsiniz.
Döndürülen URI, uygulamanıza muhtemelen yazma erişimiyle de uzun süreli okuma erişimi verir. ACTION_OPEN_DOCUMENT
işlemi özellikle uygulamanıza bir kopyasını oluşturmadan mevcut bir dosyayı okumak veya dosyayı yerinde açıp düzenlemek istediğinizde kullanışlıdır.
Ayrıca, true
olarak ayarlanan amaca EXTRA_ALLOW_MULTIPLE
ekleyerek kullanıcının birden fazla dosya seçmesine izin verebilirsiniz.
Kullanıcı yalnızca bir öğe seçerse öğeyi getData()
kaynağından alabilirsiniz.
Kullanıcı birden fazla öğe seçerse getData()
null değerini döndürür ve her bir öğeyi getClipData()
tarafından döndürülen bir ClipData
nesnesinden almanız gerekir.
Not: Niyetiniz bir MIME türü belirtmeli ve
kategorisiniCATEGORY_OPENABLE
tanımlamalıdır. Uygunsa EXTRA_MIME_TYPES
ekstrasını içeren bir MIME türü dizisi ekleyerek birden fazla MIME türü belirtebilirsiniz. Bunu yaparsanız setType()
içindeki birincil MIME türünü "*/*"
olarak ayarlamanız gerekir.
- İşlem
ACTION_OPEN_DOCUMENT
veya
ACTION_CREATE_DOCUMENT
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
- Ekstralar
-
EXTRA_MIME_TYPES
- Uygulamanızın istediği dosya türlerine karşılık gelen bir MIME türü dizisi. Bunu ekstra kullandığınızda
setType()
içindeki 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 tanımlayan boole değeridir.
EXTRA_TITLE
- Başlangıç dosya adını belirtmek amacıyla
ACTION_CREATE_DOCUMENT
ile kullanım içindir. EXTRA_LOCAL_ONLY
- Döndürülen dosyanın uzak bir hizmetten indirilmesini gerektirmek yerine, doğrudan cihazdan kullanılabilir olması gerekip gerekmediğini belirten boole değeridir.
- Kategori
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak temsil edilebilen "açılabilir" dosyaları döndürmek için.
Fotoğraf çekmek için örnek amaç:
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şlemiyle bir amaca yanıt veremez. Bunun yerine, sistem bu amacı alır ve çeşitli uygulamalardaki tüm dosyaları birleşik bir kullanıcı arayüzünde görüntüler.
Uygulamanızın dosyalarını bu kullanıcı arayüzünde sağlamak ve diğer uygulamaların açmasına izin vermek için aşağıdaki örnekte gösterildiği gibi bir DocumentsProvider
uygulaması ve PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
) için bir amaç 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ı diğer uygulamalardan açılabilir hale getirme hakkında daha fazla bilgi için Depolama erişim çerçevesini kullanarak dosyaları açma başlıklı makaleyi okuyun.
Yerel işlemler
Araba çağırmak, sık yapılan yerel bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirebilme özelliğinin reklamını yapmak için bir intent filtresi oluşturun.
Araç çağırma
Taksi çağırmak için ACTION_RESERVE_TAXI_RESERVATION
işlemini kullanın.
Not: Uygulamalar bu işlemi tamamlamadan önce kullanıcıdan onay istemelidir.
- İşlem
ACTION_RESERVE_TAXI_RESERVATION
- Veri URI'si
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
- Yok
Örnek amaç:
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
Harita üzerinde konum göstermek, harita uygulamaları için yaygın olarak kullanılan bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak bir intent filtresi oluşturun.
Bir konumu haritada gösterme
Bir harita açmak için ACTION_VIEW
işlemini kullanın ve amaç verilerindeki konum bilgilerini aşağıdaki şemalardan biriyle belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
geo:latitude,longitude
- Haritayı belirtilen enlem ve boylamda görüntüleyin.
Örnek:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Haritayı belirtilen enlem ve boylam için belirli bir yakınlaştırma düzeyinde gösterir. 1 yakınlaştırma düzeyi, Dünya'nın tamamını belirtilen enlem boylamda ortalanmış şekilde gösterir. En yüksek (en yakın) yakınlaştırma düzeyi 23'tür.
Örnek:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Haritayı, belirtilen 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
- "Açık adresim" için konumu göster. Bu, belirli bir adres veya konum sorgusu olabilir.
Örnek:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Not:
geo
URI'sında iletilen tüm dizeler kodlanmalıdır. Örneğin,1st & Pike, Seattle
dizesi1st%20%26%20Pike%2C%20Seattle
olur. Dizedeki boşluklar%20
ile kodlanır veya artı işareti (+
) ile değiştirilir.
- MIME Türü
- Yok
Örnek amaç:
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 yeteneğinin reklamını yapmak üzere bir amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de dahil olmak üzere müzik ve video uygulamaları için sık kullanılan işlemler verilmiştir.
Medya dosyası oynatma
Müzik dosyası ç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"
- Uygulamanızın gerektirdiği diğer herhangi bir sinyal.
Örnek amaç:
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 çalın
Bir arama sorgusuna göre müzik çalmak için INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
amacını kullanın. Bir uygulama, kullanıcının müzik çalması için sesli komutuna yanıt olarak bu amacı tetikleyebilir. Bu amaca yönelik alıcı uygulama, mevcut içeriği belirtilen sorguyla eşleştirmek için envanterinde arama yapar ve söz konusu içeriği oynatmaya başlar.
Bu niyette amaçlanan arama modunu belirten EXTRA_MEDIA_FOCUS
dizesini ek olarak dahil edin. Örneğin, arama modu, aramanın bir sanatçı adı mı yoksa şarkı adı mı olacağını belirtebilir.
- İşlem
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
-
MediaStore.EXTRA_MEDIA_FOCUS
(zorunlu)-
Arama modunu belirtir: Kullanıcının belirli bir sanatçı, albüm, şarkı veya oynatma listesi araması. Çoğu arama modu için ek özellikler gerekir. Örneğin, kullanıcı belirli bir şarkıyı dinlemekle ilgileniyorsa amaçta üç ekstra özellik daha bulunabilir: şarkı adı, sanatçı ve albüm. Bu niyet, her
EXTRA_MEDIA_FOCUS
değeri için aşağıdaki arama modlarını destekler:Tümü -
"vnd.android.cursor.item/*"
-
Tüm müzikleri çalın. Alıcı uygulama, akıllı seçime (ör. kullanıcının dinlediği son şarkı listesi) göre müzik çalar.
Ek ekstralar:
QUERY
(gerekli): boş bir dize. Bu ekstra özellik her zaman geriye dönük uyumluluk amacıyla sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı yapılandırılmamış 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ü çalma Uygulamalar, kullanıcının dinlemek istediği içerik türünü tanımlayamadığında bu arama moduyla bir amaç oluşturabilir. Mümkün olduğunda daha spesifik arama modları kullanın.
Ek ekstralar:
QUERY
(gerekli): Sanatçı, albüm, şarkı adı veya türün herhangi bir kombinasyonunu içeren bir dize.
-
Belirli bir türde müziği çal.
Ek ekstralar:
"android.intent.extra.genre"
(zorunlu): Tür.QUERY
(gerekli): Tür. Bu ekstra özellik her zaman geriye dönük uyumluluk amacıyla 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üziğini çalın.
Ek ekstralar:
EXTRA_MEDIA_ARTIST
(gerekli): sanatçı."android.intent.extra.genre"
: Tür.QUERY
(zorunlu): Sanatçının veya türün herhangi bir kombinasyonunu içeren bir dize. Bu ekstra özellik her zaman geriye dönük uyumluluk amacıyla sağlanır. Arama modlarını bilmeyen mevcut uygulamalar, bu amacı yapılandırılmamış bir arama olarak işleyebilir.
Albüm -
Audio.Albums.ENTRY_CONTENT_TYPE
-
Belirli bir albümden müzik çalın.
Ek ekstralar:
EXTRA_MEDIA_ALBUM
(gerekli): albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: Tür.QUERY
(gerekli): Albümün veya sanatçının herhangi bir kombinasyonunu içeren bir dize. Bu ekstra özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modlarını bilmeyen mevcut uygulamalar, bu amacı yapılandırılmamış 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ür.EXTRA_MEDIA_TITLE
(gerekli): Şarkının adı.QUERY
(zorunlu): Albüm, sanatçı, tür veya başlığın herhangi bir kombinasyonunu içeren bir dize. Bu ekstra özellik her zaman geriye dönük uyumluluk amacıyla sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı yapılandırılmamış arama olarak işleyebilir.
Oynatma listesi -
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Ek ekstraların belirtilen bazı ölçütleriyle eşleşen belirli bir oynatma listesini veya oynatma listesini çalın.
Ek ekstralar:
EXTRA_MEDIA_ALBUM
: albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: Tür."android.intent.extra.playlist"
: oynatma listesi.EXTRA_MEDIA_TITLE
: Şarkı listesinin temel aldığı şarkı adıdır.QUERY
(zorunlu): Albüm, sanatçı, tür, oynatma listesi veya başlığın herhangi bir kombinasyonunu içeren bir dize. Bu ekstra özellik her zaman geriye dönük uyumluluk amacıyla sağlanır. Arama modlarını bilmeyen mevcut uygulamalar bu amacı yapılandırılmamış arama olarak işleyebilir.
Örnek amaç:
Kullanıcı belirli bir sanatçının müziğini dinlemek isterse arama uygulaması şu 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 amacı işlerken, arama modunu belirlemek için gelen Intent
içindeki EXTRA_MEDIA_FOCUS
ekstra değerini kontrol edin. Etkinliğiniz arama modunu belirledikten sonra, söz konusu arama modu için sunulan ek ekstraların değerlerini okuyun.
Uygulamanız bu bilgilere dayanarak arama sorgusuyla eşleşen içeriği oynatmak için envanterinde arama yapabilir. Bu, aşağıdaki örnekte gösterilmiştir.
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 yaygın olarak yapılan bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak bir intent filtresi oluşturun.
Not oluşturma
Yeni not oluşturmak için
ACTION_CREATE_NOTE
işlemini kullanın ve aşağıdaki ekstra özellikleri kullanarak konu ve metin gibi not ayrıntılarını belirtin.
Not: Uygulamalar bu işlemi tamamlamadan önce kullanıcıdan onay istemelidir.
- İşlem
-
ACTION_CREATE_NOTE
- Veri URI Şeması
- Hiçbiri
- MIME Türü
-
PLAIN_TEXT_TYPE
- "*/*"
- Ekstralar
-
-
EXTRA_NAME
- Notun başlığını veya konusunu belirten bir dize.
-
EXTRA_TEXT
- Notun metnini belirten bir dize.
-
- İşlem
-
ACTION_DIAL
- Çevirici veya telefon uygulamasını açar.ACTION_CALL
- Telefon araması yapar (CALL_PHONE
iznini gerektirir)
- 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 Voice Actions'daki arama sorgularını destekleyin.
- Ekstralar
-
QUERY
- Arama sorgusunu içeren bir dize.
- İşlem
ACTION_WEB_SEARCH
- Veri URI Şeması
- Hiçbiri
- MIME Türü
- Hiçbiri
- Ekstralar
-
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
Kullanabileceğiniz ek ayar ekranları için
Settings
dokümanlarına bakın . - Veri URI Şeması
- Hiçbiri
- MIME Türü
- Yok
- İşlem
ACTION_SENDTO
veya
ACTION_SEND
ya da
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/*"
- Ekstralar
-
"subject"
- İleti konusu için bir dize (genellikle yalnızca MMS için).
"sms_body"
- Kısa mesaj için bir dize.
EXTRA_STREAM
- Eklenecek resme veya videoya işaret eden bir
Uri
.ACTION_SEND_MULTIPLE
işlemini kullanıyorsanız bu ekstra öğe, eklenecek resimlere veya videolara işaret edenUri
nesnedenArrayList
tanesidir.
- İş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 amaçları karşılayan bir sürümünü yükleyin.
adb
kullanarak bir niyeti tetikleyin: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 amacı ele alın.
Örnek amaç:
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
Arama başlatmak, telefon uygulamaları için yaygın bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak 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örüntülenir ve kullanıcının telefon aramasını başlatmak için Ara düğmesine dokunması gerekir.
Doğrudan bir 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, CALL_PHONE
iznini manifest dosyanıza eklemenizi gerektirir:
<uses-permission android:name="android.permission.CALL_PHONE" />
Geçerli telefon numaraları, IETF RFC 3966'da tanımlanan numaralardır. Geçerli örnekler şunlardır:
Telefon uygulamasının numara çevirici, telefon numaraları gibi şemaları normalleştirme konusunda başarılıdır. Bu nedenle, Uri.parse()
yönteminde açıklanan şema 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 amaç:
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); } }
Arama
Aşağıda, uygulamanızın her bir işlemi gerçekleştirebilme olanağını tanıtmak üzere bir intent filtresi oluşturmak için ihtiyacınız olan bilgiler de dahil olmak üzere, arama uygulamaları için yaygın olarak yapılan işlemler verilmiştir.
Belirli bir uygulamayı kullanarak arama yapma
Uygulamanız bağlamında aramayı desteklemek için aşağıdaki intent filtresi örneğinde gösterildiği gibi SEARCH_ACTION
işlemiyle uygulamanızda bir intent filtresi tanımlayın.
Not: Uygulama arama için SEARCH_ACTION
kullanılmasını önermiyoruz.
Bunun yerine, Google Asistan'ın uygulama içi arama konusundaki yerleşik desteğinden yararlanmak için 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 araması yapma
Bir web araması başlatmak için ACTION_WEB_SEARCH
işlemini kullanın ve SearchManager.QUERY
ekstra bölümünde arama dizesini belirtin.
Örnek amaç:
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 amaç:
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); } }
Mesajlaşma
Ek içeren bir SMS/MMS mesajı oluşturmak, kısa mesaj uygulamalarında yaygın olarak kullanılan bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak bir intent filtresi oluşturun.
Ek içeren bir SMS/MMS mesajı oluştur
SMS veya MMS kısa mesajı başlatmak için aşağıdaki niyet işlemlerinden birini kullanın ve aşağıdaki ekstra tuşları kullanarak telefon numarası, konu ve mesaj gövdesi gibi mesaj ayrıntılarını belirtin.
Örnek amaç:
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); } }
Niyetinizin diğer e-posta veya sosyal uygulamalar tarafından değil, yalnızca bir kısa mesaj uygulaması tarafından işlendiğinden emin olmak 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: Bir 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 amaç filtreleri uygulamanız gerekir. Daha fazla bilgi için Telephony
adresindeki belgelere göz atın.
Web tarayıcısı
Web URL'si yükleme, web tarayıcısı uygulamaları için yaygın olarak yapılan bir işlemdir. Uygulamanızın bu işlemi gerçekleştirme becerisini tanıtmak için aşağıdaki bölümde yer alan bilgileri kullanarak bir intent filtresi oluşturun.
Web URL'si yükle
Bir web sayfası açmak için ACTION_VIEW
işlemini kullanın ve niyet verilerinde web URL'sini belirtin.
Örnek amaç:
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 sunuyorsa web sitenizi işaret eden URL'ler için bir intent filtresi ekleyin. Böylece, kullanıcılar uygulamanızı yüklediyse, e-postalardan veya web sitenize işaret eden diğer web sayfalarından gelen bağlantılar web sayfanız yerine Android uygulamanızı açar. Android Uygulama Bağlantılarını Kullanma bölümünden daha fazla bilgi edinebilirsiniz.
Android 12'den (API düzeyi 31) başlayarak, genel bir web amacı, yalnızca uygulamanız ilgili web amacında yer alan belirli alan için onaylanırsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan adı için onaylanmazsa, web amacı bunun yerine kullanıcının varsayılan tarayıcı uygulamasına geçer.
Android Debug Bridge ile amaçları doğrulama
Uygulamanızın desteklemek istediğiniz amaçlara yanıt verdiğini doğrulamak için aşağıdakileri yaparak belirli amaçları tetiklemek üzere adb
aracını kullanabilirsiniz:
Daha fazla bilgi için Kabuk komutları yayınlama bölümüne bakın.