Android'in en önemli özelliklerinden biri, uygulamanın kullanıcıyı başka bir uygulamaya gönderebilmesidir.
bir "işleme" dayalı olarak neye benzediğini gösterir. Örneğin,
uygulamanız haritada göstermek istediğiniz bir işletmenin adresine sahipse,
uygulamanızda harita gösteren bir etkinlik. Bunun yerine, adresi görüntülemek için istek oluşturabilirsiniz
Intent
kullanarak. Android sistemi daha sonra,
adresini haritada görebilirsiniz.
İlk sınıfta açıklandığı gibi, İlk Uygulamanız ise kendi uygulamanızdaki etkinlikler arasında gezinmek için intent'leri kullanmanız gerekir. Siz bunu genellikle, JavaScript'in tam sınıf adını tanımlayan açık bir niyet ile yapar. bileşeni seçin. Ancak ayrı bir uygulamanın, başka bir uygulama tarafından gerçekleştirilen bir işlem gerçekleştirmesini "harita görüntüleme" dolaylı intent kullanmanız gerekir.
Bu derste, belirli bir eylem için nasıl örtülü niyet oluşturacağınız ve bunu nasıl kullanacağınız gösterilmektedir Başka bir uygulamada işlemi gerçekleştiren bir etkinlik başlatmak için Buraya yerleştirilmiş videoya da bakın Örtülü niyetleriniz için çalışma zamanı denetimlerini eklemenin neden önemli olduğunu öğrenin.
Dolaylı intent oluşturma
Dolaylı niyetler, başlatılacak bileşenin sınıf adını belirtmez, bunun yerine bir bir eylemdir. İşlem, yapmak istediğiniz şeyi belirtir. Örneğin, görüntüleme, düzenle, gönder veya al.
Amaç işlemlerini verilerle ilişkilendirme
Amaçlar genellikle ilişkili verileri de içerir.
e-posta iletisiyle (ör. görüntülemek istediğiniz adres veya göndermek istediğiniz e-posta iletisi) ekleyebilirsiniz.
Oluşturmak istediğiniz amaca bağlı olarak veriler bir Uri
olabilir.
ya da intent için hiç veriye ihtiyaç duymayabilir.
Verileriniz bir Uri
ise işlemi tanımlamak veIntent()
verileri.
Örneğin, telefon numarasını belirtmek için Uri
verilerini kullanarak telefon araması başlatma niyetinin nasıl oluşturulacağı aşağıda açıklanmıştır:
Kotlin
val callIntent: Intent = Uri.parse("tel:5551234").let { number -> Intent(Intent.ACTION_DIAL, number) }
Java
Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
Uygulamanız startActivity()
numaralı telefonu arayarak bu amacı gerçekleştirdiğinde, Telefon uygulaması belirtilen telefon numarasına çağrı başlatır.
Burada diğer birkaç intent, bunların işlemi ve Uri
verileri yer almaktadır
çiftler:
Harita görüntüleme
Kotlin
// Map point based on address val mapIntent: Intent = Uri.parse( "geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California" ).let { location -> // Or map point based on latitude/longitude // val location: Uri = Uri.parse("geo:37.422219,-122.08364?z=14") // z param is zoom level Intent(Intent.ACTION_VIEW, location) }
Java
// Map point based on address Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); // Or map point based on latitude/longitude // Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
Web sayfasını görüntüleme
Kotlin
val webIntent: Intent = Uri.parse("https://www.android.com").let { webpage -> Intent(Intent.ACTION_VIEW, webpage) }
Java
Uri webpage = Uri.parse("https://www.android.com"); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
Niyete ekstralar ekleme
Diğer örtülü niyet türleri için "ekstra" farklı veri türlerini,
kullanabilirsiniz. Çeşitli putExtra()
yöntemlerini kullanarak bir veya daha fazla ekstra veri ekleyebilirsiniz.
Varsayılan olarak sistem,
Uri
verileri dahil edilir. Uri
satın alma amacı taşıyorsanız, türü belirtmek için genellikle setType()
amacıyla ilişkili verileri içerebilir. MIME türünün ayarlanması,
istenen sonuca ulaşacaklarını düşünmelisiniz.
İstenen işlemi belirtmek için ekstra veri ekleyen bazı diğer niyetler şunlardır:
Ek içeren bir e-posta gönderme
Kotlin
Intent(Intent.ACTION_SEND).apply { // The intent does not have a URI, so declare the "text/plain" MIME type type = "text/plain" putExtra(Intent.EXTRA_EMAIL, arrayOf("jan@example.com")) // recipients putExtra(Intent.EXTRA_SUBJECT, "Email subject") putExtra(Intent.EXTRA_TEXT, "Email message text") putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")) // You can also attach multiple items by passing an ArrayList of Uris }
Java
Intent emailIntent = new Intent(Intent.ACTION_SEND); // The intent does not have a URI, so declare the "text/plain" MIME type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jan@example.com"}); // recipients emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); // You can also attach multiple items by passing an ArrayList of Uris
Takvim etkinliği oluşturma
Not: Bu takvim etkinliği niyeti yalnızca API ile desteklenir 14. seviye ve üstü olmalıdır.
Kotlin
// Event is on January 23, 2021 -- from 7:30 AM to 10:30 AM. Intent(Intent.ACTION_INSERT, Events.CONTENT_URI).apply { val beginTime: Calendar = Calendar.getInstance().apply { set(2021, 0, 23, 7, 30) } val endTime = Calendar.getInstance().apply { set(2021, 0, 23, 10, 30) } putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.timeInMillis) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.timeInMillis) putExtra(Events.TITLE, "Ninja class") putExtra(Events.EVENT_LOCATION, "Secret dojo") }
Java
// Event is on January 23, 2021 -- from 7:30 AM to 10:30 AM. Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); Calendar beginTime = Calendar.getInstance(); beginTime.set(2021, 0, 23, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2021, 0, 23, 10, 30); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); calendarIntent.putExtra(Events.TITLE, "Ninja class"); calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
Not: Intent
özelliğini mümkün olduğunca ayrıntılı şekilde tanımlamanız önemlidir. Örneğin, Yeşil Ofis web sitesinde bir
ACTION_VIEW
niyetini kullanarak şunun MIME türü belirtmeniz gerekir:
image/*
. Bu işlem, "görüntüleyebilen" uygulamaları engeller diğer veri türlerinin (ör. harita uygulaması)
tarafından tetiklenemez.
Amaca yönelik bir etkinlik başlatın
Intent
oluşturup ek bilgileri belirledikten sonra sisteme göndermek için startActivity()
numaralı telefonu arayın:
Kotlin
startActivity(intent)
Java
startActivity(intent);
Hiçbir uygulamanın intent alamadığı durumu ele alma
Birçok intent, yüklü başka bir uygulama tarafından başarıyla işlenmesine rağmen
cihaz üzerinde (ör. telefon, e-posta veya takvim uygulaması) uygulamanız gereken
hiçbir etkinliğin uygulamanızın amacını yerine getiremeyeceği durumlarda kullanın. İstediğiniz zaman
bir niyeti çağırın, bir çağrıyı yakalamaya
ActivityNotFoundException
Uygulamanızın amacını gerçekleştirebilecek başka bir etkinlik yoksa gerçekleşir:
Kotlin
try { startActivity(intent) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
Java
try { startActivity(intent); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
Bu istisnayı yakaladıktan sonra uygulamanızın bir sonraki adımına karar verin. Bu sonraki adımı, ulaşmayı denediğiniz amacın belirli özelliklerine bağlıdır. kullanır. Örneğin, bu amacı işleyebilecek belirli bir uygulama biliyorsanız kullanıcıya uygulamayı indirebileceği bir bağlantı sağlamalıdır. Şu işlemler hakkında daha fazla bilgi edinin: Google Play'de ürününüze yönlendiren bir bağlantı oluşturun.
Açıklama amaçlı iletişim kutusu
Sistem, amacı gerçekleştirebilecek birden fazla etkinlik tespit ederse iletişim kutusu ("belirtme" iletişim kutusu olarak da anılır) kullanıcının hangi uygulamanın kullanılacağını seçmesini sağlayın (Şekil 1'de gösterildiği gibi). Yalnızca bir sistem bunu hemen başlatır.
Tam örnek
Aşağıda, harita görüntüleme niyetinin nasıl oluşturulduğunu gösteren eksiksiz bir örnek verilmiştir. Bir oluşturmak için uygulamanız gerekir:
Kotlin
// Build the intent. val location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California") val mapIntent = Intent(Intent.ACTION_VIEW, location) // Try to invoke the intent. try { startActivity(mapIntent) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
Java
// Build the intent. Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); // Try to invoke the intent. try { startActivity(mapIntent); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
Uygulama seçiciyi gösterme
Intent
cihazınızı startActivity()
hizmetine ileterek bir etkinlik başlattığınızda, yanıt veren birden fazla uygulama olduğuna dikkat edin
kullanıcı varsayılan olarak kullanılacak uygulamayı seçebilir (alttaki bir onay kutusunu işaretleyerek
iletişim kutusunu açar. Şekil 1'e bakın). Bu, kullanıcının belirli bir işlem için
Genellikle her zaman aynı uygulamayı kullanmak ister. Örneğin, bir web sayfasını açarken (kullanıcılar
büyük ihtimalle yalnızca bir web tarayıcısı kullanır) veya fotoğraf çekerken (kullanıcılar tek bir kamerayı tercih ederler).
Ancak, yapılacak işlem birden fazla uygulama tarafından işlenecekse ve kullanıcı her seferinde farklı bir uygulamayı tercih etme (örneğin, "paylaşma") Bu işlem, kullanıcıların birden fazla bir öğeyi paylaşabilecekleri uygulamalar (açık olarak bir seçici iletişim kutusu göstermeniz gerekir) Şekil 2'de gösterildiği gibidir. Seçici iletişim kutusu kullanıcıyı her seferinde işlem için hangi uygulamayı kullanacağını seçmeye zorlar (kullanıcı bir seçim varsayılan uygulama olur).
Seçiciyi göstermek için createChooser()
kullanarak bir Intent
oluşturun ve startActivity()
adlı kullanıcıya iletin. Örnek:
Kotlin
val intent = Intent(Intent.ACTION_SEND) // Create intent to show chooser val chooser = Intent.createChooser(intent, /* title */ null) // Try to invoke the intent. try { startActivity(chooser) } catch (e: ActivityNotFoundException) { // Define what your app should do if no activity can handle the intent. }
Java
Intent intent = new Intent(Intent.ACTION_SEND); // Create intent to show chooser Intent chooser = Intent.createChooser(intent, /* title */ null); // Try to invoke the intent. try { startActivity(chooser); } catch (ActivityNotFoundException e) { // Define what your app should do if no activity can handle the intent. }
İletilen amaca yanıt veren uygulamaların listesini içeren bir iletişim kutusu gösterilir.
createChooser()
yöntemine. title
parametresi
işlem
ACTION_SEND
veya
ACTION_SEND_MULTIPLE
değilse sağlanır