Amaç, bir Intent
nesnesinde gerçekleştirmek istediğiniz işlemi (ör. "harita görüntüleme" veya "resim çek") açıklayarak başka bir uygulamada etkinlik başlatmanıza olanak tanır. Bu niyet türü, başlayacak uygulama bileşenini belirtmediği, bunun yerine bir işlem belirttiği ve işlemin gerçekleştirilmesi için bazı veriler sağladığı için implicit intent olarak adlandırılır.
startActivity()
veya startActivityForResult()
yöntemini çağırıp örtülü bir intent ilettiğinizde sistem, amacı işleyebilecek bir uygulamaya niyeti çözümler ve karşılık gelen Activity
işlemini başlatır. Amacı işleyebilecek birden fazla uygulama varsa sistem, kullanıcıya hangi uygulamanın kullanılacağını seçmesi için bir iletişim kutusu sunar.
Bu sayfada, amacı işleyen uygulama türüne göre düzenlenmiş, yaygın işlemleri gerçekleştirmek için kullanabileceğiniz birkaç örtülü amaç açıklanmaktadır. Her bölümde, uygulamanızın ilgili işlemi gerçekleştirme becerisini tanıtmak için amaç filtresini nasıl oluşturabileceğiniz de gösterilmektedir.
Dikkat: Cihazda örtülü intent alabilen uygulamalar yoksa uygulama startActivity()
çağrısı yaptığında kilitlenir. İlk olarak bir uygulamanın amacı almak üzere var olduğunu doğrulamak için Intent
nesnenizde resolveActivity()
yöntemini çağırın. Sonuç null değilse amacı işleyebilecek en az bir uygulama vardır ve startActivity()
çağrısı güvenlidir. Sonuç null ise niyeti kullanmayın ve mümkünse amacı çağıran özelliği devre dışı bırakın.
Amaç veya intent filtreleri oluşturma hakkında bilginiz yoksa önce Amaçlar ve Amaç Filtreleri başlıklı makaleyi okuyun.
Bu sayfada listelenen amaçların geliştirme ana makinenizden nasıl tetikleneceğini öğrenmek için Android Hata Ayıklama Köprüsü ile amaçları doğrulama bölümünü inceleyin.
Google Sesli İşlemler
Google Sesli İşlemler, bu sayfada listelenen amaçlardan bazılarını sesli komutlara yanıt olarak tetikler. Daha fazla bilgi için Sistem Sesli İşlemlerini Kullanmaya Başlama bölümüne bakın.
Çalar saat
Çalar saat uygulamaları için, uygulamanızın her bir işlemi gerçekleştirme becerisini tanıtmak amacıyla amaç filtresi oluşturmak üzere ihtiyaç duyduğunuz bilgileri de içeren yaygın işlemler aşağıda verilmiştir.
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ı kullanılabilir. Diğer ekstra özellikler, platformun daha yüksek sürümlerinde mevcuttur.
- İşlem
ACTION_SET_ALARM
- Veri URI'si
- Yok
- MIME Türü
- Yok
- Ekstralar
-
EXTRA_HOUR
- Alarmın çalacağı saat.
EXTRA_MINUTES
- Alarmın dakikaları.
EXTRA_MESSAGE
- Alarmı tanımlamak için kullanılan özel bir mesaj.
EXTRA_DAYS
- Bu alarmın tekrarlanacağı her hafta gününü içeren
ArrayList
. Her gün,Calendar
sınıfındanMONDAY
gibi bir tam sayıyla tanımlanmalıdır.Tek seferlik alarmlar için bu ekstra değeri belirtmeyin.
EXTRA_RINGTONE
- Alarmla kullanılacak zil sesini veya zil sesi olmadığında
VALUE_RINGTONE_SILENT
belirten bircontent:
URI.Varsayılan zil sesini kullanmak için bu ekstra zil sesini belirtmeyin.
EXTRA_VIBRATE
- Bu alarm için titreşip titreşmeyeceğini belirten bir boole değeri.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın, alarmı ayarlarken kullanıcı arayüzünü atlamasının gerekip gerekmediğini 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ştur
Geri sayım zamanlayıcı oluşturmak için ACTION_SET_TIMER
işlemini kullanın ve aşağıdaki ekstra özellikleri 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 kullanılan özel bir mesaj.
EXTRA_SKIP_UI
- Yanıt veren uygulamanın, zamanlayıcıyı ayarlarken kullanıcı arayüzünü atlamasının gerekip gerekmediğini belirten boole değeri. 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
Alarm listesini görmek için ACTION_SHOW_ALARMS
işlemini kullanın.
Çoğunlukla sistem uygulamaları tarafından kullanıldığı için çok fazla uygulama bu amacı çağırmasa 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
- Yok
- MIME Türü
- Yok
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Takvim
Etkinlik eklemek, takvim uygulamalarında sık kullanılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
Takvim etkinliği ekleme
Kullanıcının takvimine yeni bir etkinlik eklemek için ACTION_INSERT
işlemini kullanın ve Events.CONTENT_URI
kullanarak veri URI'sini belirtin.
Ardından aşağıdaki ekstraları kullanarak çeşitli etkinlik ayrıntılarını belirtebilirsiniz.
- İşlem
ACTION_INSERT
- Veri URI'si
Events.CONTENT_URI
- MIME Türü
"vnd.android.cursor.dir/event"
- 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 sayısı).
EXTRA_EVENT_END_TIME
- Etkinliğin bitiş zamanı (dönemden bu yana geçen milisaniye sayısı).
TITLE
- Etkinliğin başlığı.
DESCRIPTION
- Etkinlik açıklaması.
EVENT_LOCATION
- Etkinlik yeri.
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, kamera uygulamalarıyla ilgili sık yapılan işlemler yer almaktadır. Bu işlemler arasında, uygulamanızın her bir işlemi yapma yeteneğini tanıtmak üzere amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunmaktadır.
Bir resim veya video çekip geri gönderin
Bir kamera uygulamasını açıp bunun sonucunda ortaya çıkan fotoğraf veya videoyu almak için ACTION_IMAGE_CAPTURE
ya da ACTION_VIDEO_CAPTURE
işlemini kullanın. Ayrıca, EXTRA_OUTPUT
ek içinde kameranın fotoğrafı veya videoyu kaydetmesini istediğiniz URI konumunu 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ı, odağınıza başarıyla geri döndüğünde (başka bir deyişle, uygulamanız onActivityResult()
geri çağırmasını aldığında), fotoğrafa veya videoya EXTRA_OUTPUT
değeriyle belirttiğiniz URI'dan erişebilirsiniz.
Not: Fotoğraf çekmek için ACTION_IMAGE_CAPTURE
öğesini kullandığınızda kamera, Intent
sonuçta elde edilen fotoğrafın küçültülmüş kopyasını veya küçük resmini de "data"
adlı fazladan bir alanda Bitmap
olarak kaydedebilir.
Ö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 Uri
öğesinin nasıl oluşturulacağı da dahil olmak üzere, fotoğraf çekmek amacıyla bu niyetin nasıl kullanılacağı hakkında daha fazla bilgi için Fotoğraf çekme veya Video çekme bölümünü 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 niyeti işlerken etkinliğinizin gelen Intent
içindeki EXTRA_OUTPUT
ekstranın olup olmadığını kontrol etmesini sağlayın, ardından yakalanan görüntüyü veya videoyu bu ekstra ile belirtilen konuma kaydedin ve "data"
adlı ekstra bir öğede sıkıştırılmış küçük resim içeren bir Intent
ile setResult()
çağrısı yapın.
Hareketsiz görüntü modunda kamera uygulaması başlatma
Bir kamera uygulamasını hareketsiz görüntü 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 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ı
- 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 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, kişi yönetimi uygulamalarında gerçekleştirilen yaygın işlemler yer almaktadır. Bu işlemler arasında, uygulamanızın her bir işlemi gerçekleştirme becerisini tanıtmak üzere amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunmaktadır.
Kişi seçin
Kullanıcının bir kişi seçmesini ve uygulamanızın tüm iletişim bilgilerine erişmesini sağlamak için ACTION_PICK
işlemini kullanın ve MIME türünü Contacts.CONTENT_TYPE
olarak belirtin.
onActivityResult()
geri çağırmanıza iletilen Intent
sonucu, seçilen kişiye işaret eden content:
URI'sini içerir. Bu yanıt, uygulamanız READ_CONTACTS
iznini içermese bile Kişiler Sağlayıcı API'sini kullanarak bu kişiyi okuması için uygulamanıza geçici izinler verir.
İpucu: Telefon numarası veya e-posta adresi gibi yalnızca belirli bir iletişim bilgisine erişmeniz gerekiyorsa bunun yerine belirli kişi verilerini seçme ile ilgili sonraki bölüme bakın.
- İşlem
ACTION_PICK
- Veri URI Şeması
- Yok
- MIME Türü
Contacts.CONTENT_TYPE
Örnek 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 edindikten sonra kişi ayrıntılarını nasıl alacağınız hakkında bilgi için Kişi ayrıntılarını alma bölümünü okuyun.
Bu amacı kullanarak kişi URI'sını aldığınızda, genellikle söz konusu kişinin görünen adı ve kişinin yıldız işaretli olup olmadığı gibi temel ayrıntıları okumak için READ_CONTACTS
iznine sahip olmazsınız. Ancak, belirli bir kişi hakkında
daha ayrıntılı veriler okumak istiyorsanız (ör. bu kişinin telefon numarası veya e-posta adresi) READ_CONTACTS
iznine ihtiyacınız vardır.
Belirli kişi verilerini seç
Kullanıcının bir kişiden telefon numarası, e-posta adresi veya başka bir veri türü gibi belirli bir bilgi seçmesini sağlamak için ACTION_PICK
işlemini kullanın ve kişinin telefon numarasını almak üzere CommonDataKinds.Phone.CONTENT_TYPE
gibi aşağıdaki içerik türlerinden birine MIME türünü belirtin.
Not: Çoğu durumda, uygulamanızın belirli bir kişiyle ilgili belirli bilgileri görüntüleme
READ_CONTACTS
iznine sahip olması gerekir.
Bir kişiden yalnızca bir veri türünü almanız gerekiyorsa ContactsContract.CommonDataKinds
sınıflarından bir CONTENT_TYPE
içeren bu teknik, önceki bölümde gösterildiği gibi Contacts.CONTENT_TYPE
kullanmaktan daha verimlidir. Sonuç, Kişi Sağlayıcı'ya daha karmaşık bir sorgu yapmanıza gerek kalmadan istediğiniz verilere doğrudan erişmenizi sağlar.
onActivityResult()
geri çağırmanıza iletilen Intent
sonucu, seçilen kişi verilerine işaret eden content:
URI'sini 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ı
- Yok
- MIME Türü
-
CommonDataKinds.Phone.CONTENT_TYPE
- Telefon numarası olan kişilerden seçim yapın.
CommonDataKinds.Email.CONTENT_TYPE
- E-posta adresi olan kişilerden seçim yapın.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Posta adresi olan kişilerden seçin.
Veya
ContactsContract
altındaki diğer birçokCONTENT_TYPE
değerinden 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. //... } } }
Bir kişiyi görüntüleme
Bilinen bir kişinin ayrıntılarını görüntülemek için ACTION_VIEW
işlemini kullanın ve kişiyi intent verisi olarak content:
URI'siyle 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 herhangi bir uygulama izni gerektirmez. - Kişi listesini alma bölümünde açıklandığı gibi doğrudan tüm kişilerin listesine erişin. Bu yaklaşım
READ_CONTACTS
iznini gerektirir.
- İşlem
ACTION_VIEW
- Veri URI Şeması
content:<URI>
- MIME Türü
- Yok. Tür, kişi URI'sinden belirlenir.
Ö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, intent verisi olarak kişiyi content:
URI'si ile belirtin ve bilinen tüm iletişim bilgilerini ContactsContract.Intents.Insert
içindeki sabit değerler tarafından belirtilen ekstralara ekleyin.
Kişi URI'sini 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 herhangi bir uygulama izni gerektirmez. - Kişi listesini alma bölümünde açıklandığı gibi doğrudan tüm kişilerin listesine erişin. Bu yaklaşım
READ_CONTACTS
iznini gerektirir.
- İşlem
ACTION_EDIT
- Veri URI Şeması
content:<URI>
- MIME Türü
- Tür, kişi URI'sinden belirlenir.
- Ekstralar
- İletişim bilgileri alanlarını doldurabilmeniz için
ContactsContract.Intents.Insert
içinde tanımlanan ekstralardan biri veya daha fazlası.
Ö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 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 bilinen tüm iletişim bilgilerini ContactsContract.Intents.Insert
içindeki sabit değerlerle belirtilen ekstralara ekleyin.
- İşlem
ACTION_INSERT
- Veri URI Şeması
- Yok
- MIME Türü
Contacts.CONTENT_TYPE
- Ekstralar
ContactsContract.Intents.Insert
içinde 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 Amaçları kullanarak kişileri değiştirme bölümünü okuyun.
E-posta
İsteğe bağlı ekler içeren bir e-posta oluşturmak, e-posta uygulamalarında sık yapılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
İsteğe bağlı ekleri olan bir e-posta oluşturma
E-posta oluşturmak için, ek ekleyip eklemeyeceğinize bağlı olarak aşağıdaki işlemlerden birini kullanın ve listelenen ek anahtarları kullanarak alıcı ve konu gibi e-posta ayrıntılarını ekleyin.
- İşlem
ACTION_SENDTO
(ek için) veya
ACTION_SEND
(bir ek için) ya da
ACTION_SEND_MULTIPLE
(birden fazla ek için)- Veri URI Şeması
- Yok
- MIME Türü
-
"text/plain"
"*/*"
- Ekstralar
-
Intent.EXTRA_EMAIL
- Tüm "Alıcı" alıcı e-posta adreslerini içeren bir dize dizisi.
Intent.EXTRA_CC
- Tüm "CC" alıcılarının e-posta adreslerini içeren bir dize dizisi.
Intent.EXTRA_BCC
- Tüm "BCC" alıcılarının e-posta adreslerini içeren bir dize dizisi.
Intent.EXTRA_SUBJECT
- E-posta konusunu içeren bir dize.
Intent.EXTRA_TEXT
- E-postanın gövdesini içeren bir dize.
Intent.EXTRA_STREAM
- Eki gösteren bir
Uri
.ACTION_SEND_MULTIPLE
işlemi kullanılıyorsa bu işlem birden fazlaUri
nesnesi içeren birArrayList
olur.
Ö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 bir kısa mesaj veya sosyal uygulama değil, yalnızca 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
Dosya depolama uygulamaları için, uygulamanızın her bir işlemi gerçekleştirme becerisini tanıtmak amacıyla intent filtresi oluşturmak üzere ihtiyaç duyacağınız bilgileri de içeren yaygın işlemleri aşağıda bulabilirsiniz.
Belirli bir dosya türünü alma
Kullanıcıdan belge veya fotoğraf gibi bir dosya seçmesini ve uygulamanıza bir 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üne göre geçicidir. Bu nedenle, referansa daha sonra erişmek isterseniz daha sonra okuyabileceğiniz bir kopyasını içe aktarmanız gerekir.
Bu amaç, kullanıcının süreçte 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 teslim edilen sonuç amacı, dosyaya işaret eden bir URI'ye sahip verileri içerir.
URI; http:
URI, file:
URI veya content:
URI gibi herhangi bir şey olabilir. Ancak, seçilebilir dosyaları yalnızca bir içerik sağlayıcıdan (content:
URI) erişilebilen ve openFileDescriptor()
ile dosya akışı olarak kullanılabilen dosyalarla kısıtlamak istiyorsanız CATEGORY_OPENABLE
kategorisini amacınıza ekleyin.
Android 4.3 (API düzeyi 18) ve sonraki sürümlerde,
amaca EXTRA_ALLOW_MULTIPLE
ekleyerek kullanıcının birden fazla dosya seçmesine de izin verebilirsiniz (true
olarak ayarlanır).
Böylece, seçilen dosyaların her birine getClipData()
tarafından döndürülen bir ClipData
nesnesinde 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 tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_LOCAL_ONLY
- Döndürülen dosyanın, uzaktaki bir hizmetten indirilmesini gerektirmek yerine doğrudan cihaz üzerinden kullanılabilir olması gerekip gerekmediğini tanımlayan bir boole değeri.
- Kategori (isteğe bağlı)
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak temsil edilebilecek "açılabilir" dosyaları döndürmek için.
Fotoğraf çekme amacına örnek:
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 ACTION_OPEN_DOCUMENT
işlemini kullanıp bir MIME türü belirterek başka bir uygulama tarafından yönetilen bir dosyayı açma isteğinde bulunabilirsiniz.
Kullanıcının da uygulamanızın yazabileceği yeni bir doküman oluşturmasına izin vermek için bunun yerine ACTION_CREATE_DOCUMENT
işlemini kullanın.
Örneğin, ACTION_CREATE_DOCUMENT
amacı mevcut PDF dokümanlarından seçim yapmak yerine kullanıcıların yeni doküman oluşturmak istedikleri yeri seçmelerine olanak tanır (örneğin, dokümanın depolama alanını yöneten başka bir uygulamada). Ardından uygulamanız yeni belgeyi yazabileceği URI konumunu alır.
ACTION_GET_CONTENT
işleminden onActivityResult()
yönteminize iletilen amaç herhangi bir türde bir URI döndürebilir. Öte yandan, ACTION_OPEN_DOCUMENT
ve ACTION_CREATE_DOCUMENT
kaynaklı sonuç amacı, seçilen dosyayı her zaman DocumentsProvider
tarafından desteklenen bir content:
URI 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 dosya için uzun süreli okuma erişimi (muhtemelen yazma erişimi) verir. ACTION_OPEN_DOCUMENT
işlemi özellikle de uygulamanızda kopya oluşturmadan mevcut bir dosyayı okumak istediğinizde veya bir dosyayı açıp düzenlemek istediğinizde kullanışlıdır.
Ayrıca amaca EXTRA_ALLOW_MULTIPLE
true
olarak ayarlanmış bir şekilde kullanıcının birden fazla dosya seçmesine izin verebilirsiniz.
Kullanıcı yalnızca bir öğe seçerse öğeyi getData()
üzerinden 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 bir ClipData
nesnesinden her bir öğeyi almanız gerekir.
Not: Amacınızın bir MIME türü belirtmesi gerekir ve CATEGORY_OPENABLE
kategorisini beyan etmesi gerekir. Uygunsa EXTRA_MIME_TYPES
ekstrasıyla bir MIME türü dizisi ekleyerek birden fazla MIME türü belirtebilirsiniz. Bunu yaparsanız setType()
öğesindeki 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ürü dizisi. Bu ekstrayı kullandığınızda
setType()
öğesindeki birincil MIME türünü"*/*"
olarak ayarlamanız gerekir. EXTRA_ALLOW_MULTIPLE
- Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_TITLE
- Başlangıçtaki dosya adını belirtmek için
ACTION_CREATE_DOCUMENT
ile kullanım içindir. EXTRA_LOCAL_ONLY
- Döndürülen dosyanın, uzaktaki bir hizmetten indirilmesini gerektirmek yerine doğrudan cihaz üzerinden kullanılabilir olması gerekip gerekmediğini tanımlayan bir boole değeri.
- Kategori
-
CATEGORY_OPENABLE
- Yalnızca
openFileDescriptor()
ile dosya akışı olarak temsil edilebilecek "açılabilir" dosyaları döndürmek için.
Fotoğraf çekme amacına örnek:
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 niyete yanıt veremez. Bunun yerine, sistem bu niyeti alır ve çeşitli uygulamalardan kullanılabilen tüm dosyaları birleştirilmiş 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 istiyorsanız aşağıdaki örnekte gösterildiği gibi bir DocumentsProvider
uygulamanız ve PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
) için bir intent filtresi eklemeniz gerekir:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
Uygulamanız tarafından yönetilen dosyaları 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
Araç çağırmak, sık kullanılan yerel bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak 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
- 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 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
Haritada konum göstermek, harita uygulamaları için sık kullanılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
Bir konumu haritada gösterme
Bir harita açmak için ACTION_VIEW
işlemini kullanın ve aşağıdaki şemalardan birini kullanarak intent verilerindeki konum bilgilerini belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
geo:latitude,longitude
- Haritayı belirtilen boylam ve enlemde görüntüleyin.
Örnek:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Haritayı belirtilen boylam ve enlemde, belirli bir yakınlaştırma düzeyinde gösterin. 1 yakınlaştırma düzeyi, tüm Dünya'yı belirtilen enlem,lng cinsinden ortalanmış olarak 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ı belirtilen boylam ve enlemde, dize etiketiyle gösterin.
Örnek:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- "Açık adresim" bölümünün konumunu göster. Bu, belirli bir adres veya konum sorgusu olabilir.
Örnek:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Not:
geo
URI'sinde geçirilen tüm dizeler kodlanmalıdır. Örneğin,1st & Pike, Seattle
dizesi1st%20%26%20Pike%2C%20Seattle
haline gelir. 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, müzik ve video uygulamaları için sık yapılan işlemler yer almaktadır. Bu işlemler arasında, uygulamanızın her bir işlemi gerçekleştirme becerisini tanıtmak üzere amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunmaktadır.
Medya dosyası oynatma
Bir müzik dosyasını çalmak için ACTION_VIEW
işlemini kullanın ve intent verilerinde dosyanın URI konumunu belirtin.
- İşlem
ACTION_VIEW
- Veri URI Şeması
-
file:<URI>
content:<URI>
http:<URL>
- MIME Türü
-
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
- Veya uygulamanızın gerektirdiği diğer herhangi bir şey.
Ö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 çalma
Arama sorgusuna göre müzik çalmak için INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
intent'ini kullanın. Bir uygulama, kullanıcının müzik çalma komutuna karşılık olarak bu niyeti tetikleyebilir. Bu amaç için alıcı uygulama, mevcut içeriği belirtilen sorguyla eşleştirmek için envanterinde bir arama gerçekleştirir ve bu içeriği oynatmaya başlar.
Bu amaca, amaçlanan arama modunu belirten EXTRA_MEDIA_FOCUS
dizesini ekleyin. Örneğin, arama modu, aramanın bir sanatçı adı mı yoksa şarkı adı mı olduğunu belirtebilir.
- İşlem
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Veri URI Şeması
- Yok
- MIME Türü
- Yok
- Ekstralar
-
MediaStore.EXTRA_MEDIA_FOCUS
(zorunlu)-
Arama modunu belirtir: kullanıcının belirli bir sanatçıyı, albümü, şarkıyı veya şarkı listesini arayıp aramadığı. Çoğu arama modu ek ekstra özellikler gerektirir. Örneğin, kullanıcı belirli bir şarkıyı dinlemekle ilgileniyorsa niyette üç ek özellik olabilir: şarkı adı, sanatçı ve albüm. Bu amaç, 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. Alıcı uygulama, akıllı seçime (ör. kullanıcının en son dinlediği şarkı listesi) dayanarak bazı müzikleri çalar.
Ekstra özellikler:
QUERY
(gerekli): Boş dize. Bu ekstra özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Yapılandırılmamış -
"vnd.android.cursor.item/*"
-
Yapılandırılmamış arama sorgusundan belirli bir şarkıyı, albümü veya türü çalabilirsiniz. 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ı kullanın.
Ekstra özellikler:
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 çalma.
Ekstra özellikler:
"android.intent.extra.genre"
(zorunlu): Tür.QUERY
(zorunlu): tür. Bu ekstra özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Sanatçı -
Audio.Artists.ENTRY_CONTENT_TYPE
-
Belirli bir sanatçının müziğini çal.
Ekstra özellikler:
EXTRA_MEDIA_ARTIST
(gerekli): sanatçı."android.intent.extra.genre"
: tür.QUERY
(gerekli): Sanatçı veya türü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ı hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Albüm -
Audio.Albums.ENTRY_CONTENT_TYPE
-
Belirli bir albümden müzik çalın.
Ekstra özellikler:
EXTRA_MEDIA_ALBUM
(gerekli): albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: tür.QUERY
(gerekli): Albüm 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ı hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Şarkı -
"vnd.android.cursor.item/audio"
-
Belirli bir şarkıyı çalmak.
Ekstra özellikler:
EXTRA_MEDIA_ALBUM
: Albüm.EXTRA_MEDIA_ARTIST
: sanatçı."android.intent.extra.genre"
: tür.EXTRA_MEDIA_TITLE
(gerekli): Şarkı adı.QUERY
(gerekli): 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 için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Oynatma listesi:
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Ek ekstraların belirttiği bazı ölçütlerle eşleşen belirli bir oynatma listesini veya oynatma listesini oynatın.
Ekstra özellikler:
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ı listesinde temel alınan şarkının adı.QUERY
(gerekli): 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 için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arama olarak işleyebilir.
Örnek amaç:
Kullanıcı belirli bir sanatçının müziğini dinlemek isterse bir arama uygulaması aşağıdaki amacı oluşturabilir:
Kotlin
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Örnek intent filtresi:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Etkinliğinizde bu niyeti işlerken arama modunu belirlemek için gelen Intent
öğesindeki EXTRA_MEDIA_FOCUS
ekstranın değerini kontrol edin. Etkinliğiniz arama modunu belirlediğinde, o arama modu için ek ekstraların değerlerini okuyun.
Uygulamanız bu bilgileri kullanarak arama sorgusuyla eşleşen içeriği oynatmak için envanterinde arama yapabilir. Bu, 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 olarak kullanılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
Not oluşturma
Yeni bir not oluşturmak için
ACTION_CREATE_NOTE
işlemini kullanın ve aşağıdaki ekstraları kullanarak konu ve metin gibi not ayrıntılarını belirtin.
Not: Uygulamalar bu işlemi tamamlamadan önce kullanıcıdan onay 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 gösteren 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 Sesli İşlem'den gelen arama sorgularını destekleyin.
- 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 ayar ekranları için
Settings
dokümanlarına bakın . - Veri URI Şeması
- Yok
- 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 yönetilir.
- MIME Türü
-
"text/plain"
"image/*"
"video/*"
- Ekstralar
-
"subject"
- İleti konusuyla ilgili bir dize (genellikle yalnızca MMS için).
"sms_body"
- Kısa mesaj için bir dize.
EXTRA_STREAM
- Eklenecek resmi veya videoyu gösteren bir
Uri
.ACTION_SEND_MULTIPLE
işlemini kullanıyorsanız bu ekstra, eklenecek resim 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 bir cihaz kullanın.
- Uygulamanızın desteklemek istediğiniz amaçları işleyen bir sürümünü yükleyin.
adb
kullanarak bir intent 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 niyeti 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 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şlatma, telefon uygulamaları için yaygın olarak kullanılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
Telefon araması başlatma
Telefon uygulamasını açıp bir telefon numarası ç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 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şlar. Kullanıcının Ara düğmesine dokunması gerekmez.
ACTION_CALL
işlemi, manifest dosyanıza CALL_PHONE
iznini 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 arasında şunlar yer alır:
Telefon uygulamasının numara çevirici, telefon numaraları gibi şemaları normalleştirmede iyidir. Dolayısıyla açıklanan şema, Uri.parse()
yönteminde kesin olarak gerekli değildir.
Ancak, bir şemayı denemediyseniz veya şemanın işlenip işlenemeyeceğini bilmiyorsanız 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, arama uygulamaları için sık yapılan işlemler yer almaktadır. Bu işlemler arasında, uygulamanızın her bir işlemi gerçekleştirme yeteneğini tanıtmak üzere amaç filtresi oluşturmak için ihtiyacınız olan bilgiler de bulunmaktadır.
Belirli bir uygulamayı kullanarak arama yapma
Uygulamanızın bağlamında aramayı desteklemek için, aşağıdaki intent filtresi örneğinde gösterildiği gibi, SEARCH_ACTION
işlemiyle uygulamanızda bir intent filtresi tanımlayın.
Not: Uygulama arama için SEARCH_ACTION
kullanılması önerilmez.
Bunun yerine, Google Asistan'ın yerleşik uygulama içi arama 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ı gerçekleştirme
Bir web araması başlatmak için ACTION_WEB_SEARCH
işlemini kullanın ve arama dizesini SearchManager.QUERY
ekstra dosyası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 kullanıcının bir şeyi değiştirmesini istediğ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 sıkça kullanılan bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için 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 intent 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); } }
Amacınızın başka e-posta veya sosyal uygulamalar yerine 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: 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şlem için amaç filtrelerini uygulamanız gerekir. Daha fazla bilgi için Telephony
adresindeki belgelere göz atın.
Web tarayıcısı
Web URL'si yüklemek, web tarayıcısı uygulamalarının sıkça kullandığı bir işlemdir. Aşağıdaki bölümde yer alan bilgileri kullanarak uygulamanızın bu işlemi yapma becerisini tanıtmak için bir intent filtresi oluşturun.
Web URL'si yükleme
Bir web sayfasını açmak için ACTION_VIEW
işlemini kullanın ve intent verilerinde web URL'sini belirtin.
Örnek 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 sitenize yönlendiren URL'ler için bir intent filtresi ekleyin. Böylece kullanıcılar uygulamanızı yüklediyse e-postalardan veya web sitenize yönlendiren diğer web sayfalarından bağlantılar web sayfanız yerine Android uygulamanızı açar. Daha fazla bilgi için Android App Links'i kullanma bölümüne bakın.
Android 12'den (API düzeyi 31) itibaren, genel bir web niyeti, yalnızca uygulamanız söz konusu web amacının yer aldığı belirli bir alan adı için onaylanırsa uygulamanızdaki bir etkinliği çözümler. Uygulamanız alan adı için onaylanmazsa web amacı, bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Amaçları Android Debug Bridge ile doğrulayın
Uygulamanızın desteklemek istediğiniz amaçlara yanıt verdiğini doğrulamak için adb
aracını kullanarak belirli amaçları tetiklemek için aşağıdakileri yapabilirsiniz:
Daha fazla bilgi için Kabuk komutlarını yayınlama bölümüne bakın.