Bir amaç, Intent
nesnesinde "harita görüntüleme" veya "resim çekme" gibi gerçekleştirmek istediğiniz bir işlemi açıklayarak başka bir uygulamada etkinlik başlatmanıza olanak tanır. Bu tür amaçlar, başlatılacak uygulama bileşenini belirtmediği için örtülü amaç olarak adlandırılır. Bunun yerine bir işlem belirtir ve işlemi gerçekleştirmek için bazı veriler sağlar.
startActivity()
veya startActivityForResult()
'ı çağırıp örtülü bir amaç ilettiğinizde sistem, startActivity()
amacı çözerek amacı işleyebilecek bir uygulamaya yönlendirir ve uygulamanın ilgili Activity
'ını başlatır. Amacı işleyebilecek birden fazla uygulama varsa sistem, kullanıcının hangi uygulamayı kullanacağını seçmesi için bir iletişim kutusu gösterir.
Bu sayfada, yaygın işlemleri gerçekleştirmek için kullanabileceğiniz çeşitli örtülü amaçlar açıklanmaktadır. Bu amaçlar, amacı işleyen uygulamanın türüne göre düzenlenmiştir. Her bölüm, uygulamanızın işlemi gerçekleştirme özelliğinin reklamını yapmak için nasıl amaç filtresi oluşturabileceğinizi de gösterir.
Dikkat: Cihazda örtülü amaç alabilen uygulama yoksa startActivity()
çağrıldığında uygulama kilitlenir. Bir uygulamanın, amaçları alıp almadığını doğrulamak için öncelikle Intent
nesnenizde resolveActivity()
işlevini çağırın. Sonuç boş değilse (non-null), isteği işleyebilecek en az bir uygulama vardır ve startActivity()
çağrısı yapmak güvenlidir. Sonuç boşsa (null) amaç kullanılmamalı ve mümkünse amacı çağıran özellik devre dışı bırakılmalıdır.
Niyet veya niyet filtresi oluşturma konusunda bilginiz yoksa önce Niyetler ve Niyet Filtreleri başlıklı makaleyi okuyun.
Bu sayfada listelenen amaçları geliştirme barındırıcınızdan nasıl tetikleyeceğinizi öğrenmek için Android Debug Bridge ile amaçları doğrulama bölümüne bakın.
Google Sesli İşlemler
Google Voice İşlemleri, sesli komutlara yanıt olarak bu sayfada listelenen bazı amaçları tetikler. Daha fazla bilgi için Sistem Sesli İşlemlerini Kullanmaya Başlama başlıklı makaleyi inceleyin.
Çalar saat
Aşağıda, çalar saat uygulamaları için yaygın işlemler ve uygulamanızın her işlemi gerçekleştirme özelliğinin reklamını yapmak üzere bir amaç filtresi oluşturmak için gereken bilgiler yer almaktadır.
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 ek özellikler, platformun daha yüksek sürümlerinde kullanılabilir.
- İşlem
ACTION_SET_ALARM
- Veri URI'si
- Yok
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_HOUR
- Alarmın çalacağı saat.
EXTRA_MINUTES
- Alarmın dakikası.
EXTRA_MESSAGE
- Alarmı tanımlamak için özel bir mesaj.
EXTRA_DAYS
- Bu alarmın tekrar ettiği her hafta içi günü içeren
ArrayList
. Her gün,Calendar
sınıfından bir tam sayıyla (ör.MONDAY
) belirtilmelidir.Tek seferlik alarm için bu ek bilgiyi belirtmeyin.
EXTRA_RINGTONE
Alarmda kullanılacak zil sesini belirten - A
content:
URI'si veya zil sesi yoksaVALUE_RINGTONE_SILENT
.Varsayılan zil sesini kullanmak için bu ekstrayı belirtmeyin.
EXTRA_VIBRATE
- Bu alarm için titreşimin etkinleştirilip etkinleştirilmeyeceğini belirten bir Boole değeri.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın alarmı ayarlarken kullanıcı arayüzünü atlayıp atlamaması gerektiğini belirten bir boole değeri. Doğruysa uygulama, onay kullanıcı arayüzünü atlayıp belirtilen alarmı ayarlamalıdır.
Ö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ızda SET_ALARM
izni olmalıdır:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Örnek amaç 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
eylemini 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
- Yok
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_LENGTH
- Zamanlayıcının saniye cinsinden uzunluğu.
EXTRA_MESSAGE
- Zamanlayıcıyı tanımlamak için özel bir mesaj.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın zamanlayıcıyı ayarlarken kullanıcı arayüzünü atlayıp atlamaması gerektiğini belirten bir boole değeri. Doğruysa uygulama, onay kullanıcı arayüzünü atlayıp belirtilen zamanlayıcıyı başlatmalıdır.
Ö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ızda SET_ALARM
izni olmalıdır:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Örnek amaç 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 amaç öncelikle sistem uygulamaları tarafından kullanıldığından, bu amacı çağıran çok fazla uygulama olmasa da çalar saat gibi davranan tüm uygulamalar bu amaç filtresini uygulayabilir ve 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
- Yok
- MIME Türü
- Yok
Örnek amaç filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Takvim
Etkinlik ekleme, takvim uygulamalarında sıkça yapılan bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç 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"
- Ekstralar
-
EXTRA_EVENT_ALL_DAY
- Bunun 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 milisaniye cinsinden).
EXTRA_EVENT_END_TIME
- Etkinliğin bitiş zamanı (dönemden bu yana geçen milisaniye cinsinden süre).
TITLE
- Etkinliğin adı.
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 sabitler kullanılarak çok 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 amaç 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 işlemi gerçekleştirme özelliğinin reklamını yapmak için bir amaç filtresi oluşturmanız gereken bilgiler de dahil olmak üzere kamera uygulamalarıyla ilgili yaygın işlemler yer almaktadır.
Resim veya video çekip döndürme
Bir kamera uygulamasını açmak ve sonuç olarak elde edilen fotoğrafı veya videoyu almak için ACTION_IMAGE_CAPTURE
ya da ACTION_VIDEO_CAPTURE
işlemini kullanın. Ayrıca, kameranın fotoğrafı veya videoyu kaydetmesini istediğiniz URI konumunu EXTRA_OUTPUT
extra'da belirtin.
- İşlem
ACTION_IMAGE_CAPTURE
veya
ACTION_VIDEO_CAPTURE
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_OUTPUT
- Kamera uygulamasının fotoğraf veya video dosyasını (
Uri
nesnesi olarak) kaydettiği URI konumu.
Kamera uygulaması, etkinliğinize başarıyla odaklandığında (diğer bir deyişle uygulamanız onActivityResult()
geri çağırmasını aldığında) EXTRA_OUTPUT
değeriyle belirttiğiniz URI'deki fotoğrafa veya videoya erişebilirsiniz.
Not: Fotoğraf çekmek için ACTION_IMAGE_CAPTURE
kullandığınızda kamera, sonuç Intent
'te fotoğrafın ölçeği küçültülmüş bir kopyasını veya küçük resmini de döndürebilir. Bu kopya, "data"
adlı ek bir alanda Bitmap
olarak kaydedilir.
Ö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 amaç ö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>
Bu amaçla fotoğraf çekme hakkında daha fazla bilgi edinmek için (ör. çıkış konumu için uygun bir Uri
oluşturma) Fotoğraf çekme veya Video çekme başlıklı makaleyi inceleyin.
Örnek amaç filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Bu amaca yönelik isteği işlerken etkinliğiniz, gelen Intent
içinde EXTRA_OUTPUT
ekstrasını kontrol etmeli, ardından yakalanan resmi veya videoyu bu ekstranın belirttiği konuma kaydetmeli ve "data"
adlı ekstrada sıkıştırılmış bir küçük resim içeren Intent
ile setResult()
işlevini çağırmalıdır.
Kamera uygulamasını hareketsiz görüntü modunda başlatma
Kamera uygulamasını fotoğraf 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
- 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 amaç 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
- 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 amaç filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kişiler uygulaması
Aşağıda, uygulamanızın her işlemi gerçekleştirme özelliğinin reklamını yapmak için bir amaç filtresi oluşturmanız gereken bilgiler de dahil olmak üzere, kişiler yönetimi uygulamalarıyla ilgili yaygın işlemler verilmiştir.
Kişi seçin
Kullanıcının bir kişi seçmesini ve uygulamanıza tüm kişi 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çilen kişiyi işaret eden content:
URI'sini içerir. Yanıt, uygulamanız READ_CONTACTS
iznini içermese bile Contacts Provider API'yi kullanarak bu kişiyi okumak için uygulamanıza geçici izinler verir.
İpucu: Yalnızca telefon numarası veya e-posta adresi gibi belirli bir iletişim bilgisine erişmeniz gerekiyorsa bunun yerine belirli iletişim verilerini seçme ile ilgili bir sonraki bölüme bakın.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Yok
- 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 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 amaçla kişi URI'sini aldığınızda, genellikle bu kişinin temel ayrıntılarını (ör. görünen ad ve kişinin yıldızlı olup olmadığı) okumak için READ_CONTACTS
iznine ihtiyacınız olmaz. Ancak belirli bir kişi hakkında telefon numarası veya e-posta adresi gibi READ_CONTACTS
daha ayrıntılı veriler okumak istiyorsanız izne ihtiyacınız vardır.
Belirli iletişim verilerini seçme
Kullanıcının bir kişiden belirli bir bilgi (ör. telefon numarası, e-posta adresi veya başka bir veri türü) seçmesini sağlamak için ACTION_PICK
işlemini kullanın ve MIME türünü aşağıdaki içerik türlerinden biri olarak belirtin. Örneğin, kişinin telefon numarasını almak için CommonDataKinds.Phone.CONTENT_TYPE
kullanın.
Not: Çoğu durumda, uygulamanızın belirli bir kişiyle ilgili 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 bu teknik, önceki bölümde gösterildiği gibi Contacts.CONTENT_TYPE
kullanmaktan daha verimlidir.CONTENT_TYPE
ContactsContract.CommonDataKinds
Sonuç, Kişiler Sağlayıcı'ya daha karmaşık bir sorgu göndermenizi gerektirmeden istediğiniz verilere doğrudan erişmenizi sağlar.
onActivityResult()
geri çağırma işlevinize iletilen Intent
sonucu, seçilen iletişim verilerine 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şiler arasından 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şiler arasından seçim yapın.
Veya
ContactsContract
altında yer alan diğerCONTENT_TYPE
değerlerinden biri.
Ö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şileri görüntüleme
Bilinen bir kişinin ayrıntılarını göstermek için ACTION_VIEW
işlemini kullanın ve niyet verisi olarak content:
URI'si ile kişiyi 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 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ş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 kişisinin URI'sinden çıkarılır.
Ö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 kişileri düzenleme
Bilinen bir kişiyi düzenlemek için ACTION_EDIT
işlemini kullanın, niyet verisi olarak content:
URI'si ile kişiyi belirtin ve ContactsContract.Intents.Insert
içindeki sabitler tarafından belirtilen ekstralara bilinen tüm kişi bilgilerini ekleyin.
Kişi 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 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ş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 çıkarılır.
- Ekstralar
ContactsContract.Intents.Insert
içinde tanımlanan bir veya daha fazla ek bilgi böylece iletişim bilgilerinin alanlarını doldurabilirsiniz.
Ö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 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
değerini belirtin ve ContactsContract.Intents.Insert
içindeki sabitler tarafından belirtilen ekstralara bilinen tüm kişi bilgilerini ekleyin.
- İşlem
ACTION_INSERT
- Veri URI Şeması
- Yok
- MIME Türü
Contacts.CONTENT_TYPE
- Ekstralar
ContactsContract.Intents.Insert
içinde tanımlanan ekstralardan 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 edinmek için Niyetleri kullanarak kişileri değiştirme başlıklı makaleyi inceleyin.
E-posta
İsteğe bağlı ekler içeren bir e-posta oluşturmak, e-posta uygulamalarında yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç 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. Ayrıca, listelenen ek tuşları kullanarak alıcı ve konu gibi e-posta ayrıntılarını ekleyin.
- İşlem
ACTION_SENDTO
(ek yoksa) veya
ACTION_SEND
(bir ek varsa) veya
ACTION_SEND_MULTIPLE
(birden fazla ek varsa)- Veri URI Şeması
- Yok
- MIME Türü
-
"text/plain"
"*/*"
- Ekstralar
-
Intent.EXTRA_EMAIL
- Tüm "Alıcı" e-posta adreslerinin dize dizisi.
Intent.EXTRA_CC
- Tüm "CC" alıcı e-posta adreslerinin dize dizisi.
Intent.EXTRA_BCC
- Tüm "BCC" alıcı e-posta adreslerinin 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 bu işlem yerine birden fazlaUri
nesnesi içeren birArrayList
kullanılır.
Ö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); } }
Amacınızın yalnızca bir e-posta uygulaması tarafından işlenmesini ve kısa mesaj veya sosyal medya uygulaması tarafından işlenmemesini 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 amaç 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 amaç filtresi oluşturmak için gereken bilgiler yer almaktadır.
Belirli bir dosya türünü alma
Kullanıcıdan bir dosya (ör. doküman veya fotoğraf) 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üyle geçicidir. Bu nedenle, daha sonra erişmek isterseniz daha sonra okuyabileceğiniz bir kopyayı içe aktarmanız gerekir.
Bu amaç, 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ç niyeti, dosyaya 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 sınırlamak istiyorsanız niyetinize CATEGORY_OPENABLE
kategorisini ekleyin.
Android 4.3 (API düzeyi 18) ve sonraki sürümlerde, niyetin true
olarak ayarlanmış EXTRA_ALLOW_MULTIPLE
ekleyerek kullanıcının birden fazla dosya seçmesine de izin verebilirsiniz.
Ardından, seçilen dosyaların her birine ClipData
getClipData()
tarafından döndürülen bir nesnede 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ü.
- Ekstralar
-
EXTRA_ALLOW_MULTIPLE
- Kullanıcının aynı anda birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_LOCAL_ONLY
- Döndürülen dosyanın uzaktan hizmetten indirilmesini gerektirmek yerine doğrudan cihazdan kullanılabilir olup olmadığını belirten bir Boole değeri.
- Kategori (isteğe bağlı)
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak gösterilebilen "açılabilir" dosyaları döndürmek için.
Fotoğraf alma amaçlı örnek sorgu:
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 amaç 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, ACTION_GET_CONTENT
işlemini kullanarak Android 4.4 veya sonraki sürümlerde çalışırken ACTION_OPEN_DOCUMENT
işlemini kullanarak ve bir MIME türü belirterek başka bir uygulama tarafından yönetilen bir dosyanın açılmasını isteyebilirsiniz.
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, mevcut PDF dokümanları arasından seçim yapmak yerine ACTION_CREATE_DOCUMENT
amaçlı işlemi kullanarak kullanıcılar, yeni bir doküman oluşturmak istedikleri yeri (ör. dokümanın depolama alanını yöneten başka bir uygulama) seçebilir. Uygulamanız daha sonra yeni dokümanı yazabileceği URI konumunu alır.
onActivityResult()
işleminden ACTION_GET_CONTENT
yöntemine iletilen niyet herhangi bir türde URI döndürebilirken ACTION_OPEN_DOCUMENT
ve ACTION_CREATE_DOCUMENT
işlemlerinden gelen sonuç niyeti, seçilen dosyayı her zaman DocumentsProvider
tarafından desteklenen bir content:
URI'si 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 verir. Ayrıca, yazma erişimi de verebilir. ACTION_OPEN_DOCUMENT
işlemi, özellikle mevcut bir dosyayı uygulamanıza kopyalamadan okumak veya bir dosyayı yerinde açıp düzenlemek istediğinizde yararlıdır.
Ayrıca, niyetinize EXTRA_ALLOW_MULTIPLE
ekleyerek kullanıcının birden fazla dosya seçmesine izin verebilirsiniz. EXTRA_ALLOW_MULTIPLE
, true
olarak ayarlanmalıdır.
Kullanıcı yalnızca bir öğe seçerse öğeyi getData()
konumundan alabilirsiniz.
Kullanıcı birden fazla öğe seçerse getData()
null değerini döndürür ve bunun yerine getClipData()
tarafından döndürülen ClipData
nesnesinden her öğeyi almanız gerekir.
Not: Amacınızda bir MIME türü belirtilmeli ve CATEGORY_OPENABLE
kategorisi bildirilmelidir. Gerekirse EXTRA_MIME_TYPES
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ı
- Yok
- 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ürleri dizisi. Bu ekstrayı kullandığınızda
setType()
içinde birincil MIME türünü"*/*"
olarak ayarlamanız gerekir. EXTRA_ALLOW_MULTIPLE
- Kullanıcının aynı anda 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 uzaktan hizmetten indirilmesini gerektirmek yerine doğrudan cihazdan kullanılabilir olup olmadığını belirten bir Boole değeri.
- Kategori
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak gösterilebilen "açılabilir" dosyaları döndürmek için.
Fotoğraf alma amaçlı örnek sorgu:
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 amaca yönelik işlemi 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 bunları açmasına izin vermek için DocumentsProvider
uygulamanız ve aşağıdaki örnekte gösterildiği gibi PROVIDER_INTERFACE
için bir amaç filtresi eklemeniz gerekir:
PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
)
<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 açılabilmesi hakkında daha fazla bilgi edinmek için Depolama alanı erişim çerçevesini kullanarak dosyaları açma başlıklı makaleyi inceleyin.
Yerel işlemler
Araba ç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 özelliğini tanıtmak için bir amaç filtresi oluşturun.
Araç çağırma
Google Sesli İşlemler
- "get me a taxi" (Bana taksi çağır)
- "call me a car" (Bana araba deyin)
(Yalnızca Wear OS)
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
- Yok
- MIME Türü
- Yok
- 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 amaç 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ında sıkça yapılan bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç filtresi oluşturun.
Konumu haritada gösterme
Harita açmak için ACTION_VIEW
işlemini kullanın ve aşağıdaki şemalardan biriyle amaç verilerinde konum bilgilerini belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
geo:latitude,longitude
- Haritayı belirtilen boylam ve enlemde göster.
Örnek:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Haritayı, belirli bir yakınlaştırma düzeyinde, verilen boylam ve enlemde gösterir. 1 yakınlaştırma düzeyi, verilen lat,lng değerlerine göre ortalanmış şekilde tüm Dünya'yı 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 dize etiketiyle göster.
Örnek:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- "Sokak 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'sinde 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şaretiyle (+
) 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 amaç 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 işlemi gerçekleştirme özelliğinin reklamını yapmak için bir amaç filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgiler de dahil olmak üzere müzik ve video uygulamalarıyla ilgili yaygın işlemler verilmiştir.
Medya dosyası oynatma
Bir müzik dosyasını çalmak için ACTION_VIEW
işlemini kullanın ve dosyanın URI konumunu amaç verilerinde 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 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 amaç 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
Google Sesli İşlemler
- "play michael jackson billie jean" (Michael Jackson'ın Billie Jean şarkısını çal)
Müzik çalmak için arama sorgusuna dayalı olarak INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
amacını kullanın. Bir uygulama, kullanıcının müzik çalma sesli komutuna yanıt olarak bu niyeti tetikleyebilir. Bu amaç için alıcı uygulama, mevcut içeriği verilen sorguyla eşleştirmek üzere envanterinde arama yapar ve bu içeriği oynatmaya başlar.
Bu amaçta, amaçlanan arama modunu belirten EXTRA_MEDIA_FOCUS
dizesini ekleyin. Örneğin, arama modu, aramanın sanatçı adı veya şarkı adı için olup olmadığını belirtebilir.
- İşlem
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ekstralar
-
MediaStore.EXTRA_MEDIA_FOCUS
(zorunlu)-
Arama modunu belirtir: Kullanıcının belirli bir sanatçı, albüm, şarkı veya oynatma listesi arayıp aramadığı. Çoğu arama modu ekstralar gerektirir. Örneğin, kullanıcı belirli bir şarkıyı dinlemek istiyorsa bu amaca üç ek bilgi daha dahil olabilir: şarkı başlığı, sanatçı ve albüm. Bu amaç,
EXTRA_MEDIA_FOCUS
değerinin her biri için aşağıdaki arama modlarını destekler:Hepsi -
"vnd.android.cursor.item/*"
-
İstediğiniz müziği çalın. Alıcı uygulama, akıllı bir seçime (ör. kullanıcının dinlediği son oynatma listesi) göre müzik çalar.
Ekstralar:
QUERY
(zorunlu): boş bir dize. Bu ek özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgisi olmayan 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ü çalma Uygulamalar, kullanıcının dinlemek istediği içerik türünü belirleyemediğinde bu arama moduyla bir amaç oluşturabilir. Mümkün olduğunda daha spesifik arama modlarını kullanın.
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 çalma
Ekstralar:
"android.intent.extra.genre"
(zorunlu): Tür.QUERY
(zorunlu): Tür. Bu ek özellik, geriye dönük uyumluluk için her zaman sağlanır. Arama modları hakkında bilgisi olmayan 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 çalma
Ekstralar:
EXTRA_MEDIA_ARTIST
(zorunlu): sanatçı."android.intent.extra.genre"
: tür.QUERY
(zorunlu): Sanatçının veya türün herhangi bir kombinasyonunu içeren bir dize. Bu ek özellik, geriye dönük uyumluluk için her zaman sağlanır. Arama modları hakkında bilgisi olmayan 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 çalma
Ekstralar:
EXTRA_MEDIA_ALBUM
(zorunlu): albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: tür.QUERY
(zorunlu): Albüm veya sanatçının herhangi bir kombinasyonunu içeren bir dize. Bu ek özellik, geriye dönük uyumluluk için her zaman sağlanır. Arama modları hakkında bilgisi olmayan mevcut uygulamalar bu amacı yapılandırılmamış bir arama olarak işleyebilir.
Şarkı -
"vnd.android.cursor.item/audio"
-
Belirli bir şarkıyı çalma
Ekstralar:
EXTRA_MEDIA_ALBUM
: Albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: tür.EXTRA_MEDIA_TITLE
(zorunlu): Şarkı adı.QUERY
(zorunlu): Albüm, sanatçı, tür veya başlığın herhangi bir kombinasyonunu içeren dize. Bu ek özellik, geriye dönük uyumluluk için her zaman sağlanır. Arama modları hakkında bilgisi olmayan mevcut uygulamalar bu amacı yapılandırılmamış bir arama olarak işleyebilir.
Oynatma listesi -
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Belirli bir oynatma listesini veya ekstralar tarafından belirtilen bazı ölçütlere uyan bir oynatma listesini oynatma.
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
: Oynatma listesinin temel alındığı şarkının adı.QUERY
(zorunlu): Albüm, sanatçı, tür, oynatma listesi veya başlığın herhangi bir kombinasyonunu içeren dize. Bu ek özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgisi olmayan mevcut uygulamalar, bu amacı yapılandırılmamış bir arama olarak işleyebilir.
Örnek amaç:
Kullanıcı belirli bir sanatçının müziklerini dinlemek istiyorsa 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 amaç filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Bu amaca yönelik işlemi etkinliğinizde gerçekleştirirken arama modunu belirlemek için gelen EXTRA_MEDIA_FOCUS
içinde Intent
değerini kontrol edin. Etkinliğiniz arama modunu belirledikten sonra, söz konusu arama modu için ek özelliklerin değerlerini okuyun.
Bu bilgiler sayesinde 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 yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç 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 istemelidir.
- İşlem
-
ACTION_CREATE_NOTE
- Veri URI Şeması
- Yok
- 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
: 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 Voice Actions'daki arama sorgularını destekler.
- Ekstralar
-
QUERY
- Arama sorgusunu içeren bir dize.
- İşlem
ACTION_WEB_SEARCH
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- 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
Kullanılabilen ek ayarlar ekranları için
Settings
dokümanlarına bakı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/*"
- 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 resim veya videoyu gösteren bir
Uri
.ACTION_SEND_MULTIPLE
işlemi kullanılıyorsa bu ek, eklenecek resimlere veya videolara işaret edenUri
nesnelerininArrayList
'idir.
- İş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ı işleyen bir sürümünü yükleyin.
adb
kullanarak bir amaç tetikleyin:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
Örneğin:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- Gerekli amaç filtrelerini tanımlarsanız amacı işleyin.
Ö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 amaç 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şlatma, telefon uygulamalarında yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç 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 görüşmesi başlatılır. 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 şunlar bulunur:
Telefon uygulamasının ç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 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); } }
Arat
Aşağıda, arama uygulamaları için yaygın işlemler ve uygulamanızın her işlemi gerçekleştirme özelliğinin reklamını yapmak üzere bir amaç filtresi oluşturmak için gereken bilgiler yer almaktadır.
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 uygulamanızda SEARCH_ACTION
işlemiyle bir intent filtresi bildirin.
Not: Uygulama arama için SEARCH_ACTION
kullanmanızı önermiyoruz.
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 amaç 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
Web araması başlatmak için ACTION_WEB_SEARCH
işlemini kullanın ve arama dizesini SearchManager.QUERY
ekstrasında 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ın kullanıcının bir şeyi değiştirmesini gerektirdiği durumlarda sistem Ayarlar uygulamasında bir ekran açmak için aşağıdaki amaç 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); } }
Kısa mesaj kullanımı
Ek içeren bir SMS/MMS mesajı oluşturmak, kısa mesaj uygulamalarında sıkça yapılan bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç filtresi oluşturun.
Ek içeren bir SMS/MMS mesajı oluşturma
SMS veya MMS kısa mesajı başlatmak için aşağıdaki amaç işlemlerinden birini kullanın ve aşağıdaki ek anahtarları 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); } }
Amacınızın yalnızca bir kısa mesaj uygulaması tarafından işlenmesini ve diğer e-posta veya sosyal uygulamalar tarafından işlenmemesini 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 amaç 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ılabilmek için birkaç ek işlemle ilgili amaç filtreleri uygulamanız gerekir. Daha fazla bilgi için Telephony
adresindeki dokümanları inceleyin.
Web tarayıcısı
Web URL'si yüklemek, web tarayıcısı uygulamalarında yaygın bir işlemdir. Aşağıdaki bölümdeki bilgileri kullanarak uygulamanızın bu işlemi gerçekleştirme özelliğini tanıtmak için bir amaç filtresi oluşturun.
Web URL'si yükleme
Bir web sayfasını açmak için ACTION_VIEW
işlemini kullanın
ve amaç 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 amaç 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 sitenize yönlendiren URL'ler için bir intent filtresi ekleyin. Ardından, kullanıcılar uygulamanızı yüklemişse e-postalardan veya web sitenize yönlendiren diğer web sayfalarından gelen bağlantılar, web sayfanız yerine Android uygulamanızı açar. Daha fazla bilgiyi Android uygulama bağlantılarını kullanma başlıklı makalede bulabilirsiniz.
Android 12'den (API düzeyi 31) itibaren, genel bir web amaçlı işlemi yalnızca uygulamanız söz konusu web amaçlı işlemde yer alan belirli alan için onaylanmışsa uygulamanızdaki bir etkinlik çözer. Uygulamanız alan için onaylanmadıysa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
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ğıdaki adımları uygulayarak belirli amaçları tetiklemek üzere adb
aracını kullanabilirsiniz:
Daha fazla bilgi için Kabuk komutları verme başlıklı makaleyi inceleyin.