Android 6.0 Marshmallow, kullanıcıların Google Asistan gibi asistan uygulamaları aracılığıyla uygulamalarla etkileşimde bulunmaları için yeni bir yol sunar. Asistan, kullanıcıların geçerli etkinlik için bağlamla alakalı işlemleri edinmek için görüntüleyebileceği üst düzey bir penceredir. Bu işlemler, cihazdaki diğer uygulamalara derin bağlantılar içerebilir.
Kullanıcılar, Asistan'ı Ana Sayfa düğmesine uzun basarak veya bir anahtar kelime söyleyerek etkinleştirir. Buna karşılık, sistem bağlamsal olarak alakalı işlemleri gösteren üst düzey bir pencere açar.
Google Asistan gibi bir asistan uygulaması, Asistan yer paylaşımlı penceresini Android platform düzeyindeki işlevlerle çalışan Now on Tap adlı bir özellik aracılığıyla uyguluyor. Sistem, kullanıcının bir asistan uygulaması seçmesine izin verir. Bu uygulama, Android'in Assist API'sini kullanarak uygulamanızdan bağlamsal bilgiler alır.
Bu kılavuzda, Android uygulamalarının asistan kullanıcı deneyimini iyileştirmek için Android Assist API'sini nasıl kullandığı açıklanmaktadır. Asistan'ın başlatıp kontrol edebilmesi için medya uygulaması oluşturmayı öğrenmek için Google Asistan ve medya uygulamaları başlıklı makaleyi inceleyin.
Asistanları kullanma
Şekil 1'de asistanla tipik bir kullanıcı etkileşimi gösterilmektedir. Kullanıcı Ana Sayfa düğmesine uzun bastığında, Assist API geri çağırmaları kaynak uygulamada çağrılır (1. adım). Asistan, yer paylaşımlı pencereyi oluşturur (2. ve 3. adımlar) ve ardından kullanıcı gerçekleştirecek işlemi seçer. Asistan, seçilen işlemi yürütür. Örneğin, (hedef) restoran uygulamasına (4. adım) derin bağlantı içeren bir niyet etkinleşir.

Şekil 1. Google uygulamasının Now on Tap özelliğiyle Asistan etkileşimi örneği
Kullanıcılar, Ayarlar > Uygulamalar > Varsayılan Uygulamalar > Destek ve ses girişi'ni seçerek asistanı yapılandırabilir. Kullanıcılar, ekran içeriklerine metin olarak erişme ve ekran görüntüsüne erişme gibi sistem seçeneklerini Şekil 2'de gösterildiği gibi değiştirebilirler.

Şekil 2. Asistan ve ses girişi ayarları
Kaynak uygulama
Uygulamanızın, kullanıcıya bilgi kaynağı olarak Asistan'la birlikte çalıştığından emin olmak için yalnızca erişilebilirlikle ilgili en iyi uygulamalara uymanız gerekir. Bu bölümde, Asistan kullanıcı deneyimini iyileştirmeye yardımcı olacak ek bilgilerin nasıl sağlanacağı ve özel Görünümler gibi özel işlem gerektiren senaryolar açıklanmaktadır.
Ek bilgileri asistanla paylaşın
Uygulamanız, metin ve ekran görüntüsüne ek olarak asistanla başka bilgiler paylaşabilir. Örneğin, müzik uygulamanız mevcut albüm bilgilerini iletmeyi seçebilir. Böylece asistan, mevcut etkinliğe göre daha akıllı işlemler önerebilir. Assist API'lerinin medya denetimleri sağlamadığını unutmayın. Medya kontrolleri eklemek için Google Asistan ve medya uygulamaları konusuna bakın.
Uygulamanız, asistana ek bilgi sağlamak için bir uygulama dinleyiciyi kaydederek genel uygulama bağlamı sağlar ve Şekil 3'te gösterildiği gibi etkinlik geri çağırmalarıyla etkinliğe özgü bilgiler sağlar:

Şekil 3. Assist API yaşam döngüsü sırası şeması
Uygulama, genel uygulama bağlamı sağlamak için Application.OnProvideAssistDataListener
uygulamasını oluşturur ve registerOnProvideAssistDataListener()
kullanarak kaydeder.
Etkinliğe özel bağlamsal bilgiler sağlamak için etkinlik, onProvideAssistData()
ve onProvideAssistContent()
öğelerini geçersiz kılar.
Bu iki etkinlik yöntemi, isteğe bağlı global geri çağırmanın çağrılmasından sonra çağrılır. Geri çağırmalar ana iş parçacığında yürütüldüğü için istemde tamamlanmalıdır.
Geri çağırmalar yalnızca etkinlik çalışıyorken çağrılır.
Bağlam sağlama
Kullanıcı asistanı etkinleştirdiğinde, mevcut uygulamanın tüm bağlamını AssistStructure
örneği olarak gösteren tam bir ACTION_ASSIST
Intent'i derlemek için onProvideAssistData()
çağrılır. Destek amacının EXTRA_ASSIST_CONTEXT
bölümünde görünecek şekilde pakete istediğiniz her şeyi eklemek için bu yöntemi geçersiz kılabilirsiniz.
İçerik açıklama
Uygulamanız, mevcut etkinlikle alakalı, içerikle ilgili referanslar sağlayarak asistan kullanıcı deneyimini iyileştirmek için onProvideAssistContent()
özelliğini kullanabilir. Uygulama içeriğini, Schema.org tarafından tanımlanan ortak sözlüğü kullanarak bir JSON-LD nesnesi kullanarak tanımlayabilirsiniz. Aşağıdaki örnekte bir müzik uygulaması, kullanıcının şu anda görüntülemekte olduğu müzik albümünü açıklamak için yapılandırılmış veriler sağlar:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
Ayrıca, aşağıdaki avantajları sağlayabilecek özel onProvideAssistContent()
uygulamalarıyla kullanıcı deneyimini de iyileştirebilirsiniz:
- Etkinliğin üst düzey bağlamını daha iyi yansıtmak için sağlanan içeriğin amacını ayarlar.
- Görüntülenen içeriğin URI'sini sağlar.
setClipData()
alanını, kullanıcının görüntülemekte olduğu ilgi alanıyla ilgili ek içeriklerle doldurur.
Not: Özel metin seçimi uygulaması kullanan uygulamaların muhtemelen onProvideAssistContent()
yöntemini uygulaması ve setClipData()
yöntemini çağırması gerekir.
Varsayılan uygulama
onProvideAssistData()
veya onProvideAssistContent()
geri çağırması uygulanmazsa sistem, geçerli pencere güvenli olarak işaretlenmediği sürece devam eder ve otomatik olarak toplanan bilgileri asistana iletir.
Şekil 3'te gösterildiği gibi sistem, metin toplamak ve hiyerarşi bilgilerini görüntülemek için varsayılan onProvideStructure()
ve onProvideVirtualStructure()
uygulamalarını kullanır. Görünümünüzde özel metin çizimi kullanılıyorsa asistana setText(CharSequence)
yöntemini çağırarak kullanıcıya gösterilen metni sağlamak için onProvideStructure()
değerini geçersiz kılın.
Çoğu durumda erişilebilirlik desteğini uygulamak, asistanın ihtiyaç duyduğu bilgileri edinmesini sağlar. Erişilebilirlik desteğini uygulamak için Uygulamaları Erişilebilir Hale Getirme bölümünde açıklanan, aşağıdakiler de dahil olmak üzere en iyi uygulamaları dikkate alın:
android:contentDescription
özelliklerini sağlayın.- Özel görünümler için
AccessibilityNodeInfo
öğesini doldurun. - Özel
ViewGroup
nesnelerinin alt öğelerini doğru şekilde gösterdiğinden emin olun.
Asistanların görüntüleme sayıları hariç
Uygulamanız, hassas bilgileri işlemek için WindowManager
öğesinin FLAG_SECURE
düzen parametresini ayarlayarak geçerli görünümü asistandan hariç tutabilir. İletişim kutuları da dahil olmak üzere, etkinlik tarafından oluşturulan her pencere için FLAG_SECURE
değerini açık bir şekilde ayarlamanız gerekir. Uygulamanız, bir yüzeyi asistandan hariç tutmak için setSecure()
özelliğini de kullanabilir. Asistan'dan gelen tüm görüntülemeleri hariç tutmak için global (uygulama düzeyinde) bir mekanizma yoktur. FLAG_SECURE
değerinin, Assist API geri çağırmalarının etkinleşmesini durdurmasına neden olmadığını unutmayın. FLAG_SECURE
kullanan etkinlik, bu kılavuzun önceki bölümlerinde açıklanan geri çağırmaları kullanarak Asistan uygulamasına açık bir şekilde bilgi sağlamaya devam edebilir.
Not: Kurumsal hesaplarda (Android for Work) yönetici, DevicePolicyManager
API'sinin setScreenCaptureDisabled()
yöntemini kullanarak iş profili için asistan verilerinin toplanmasını devre dışı bırakabilir.
Sesli etkileşimler
Assist API geri çağırmaları da anahtar kelime öbeği algılamaya bağlı olarak çağrılır. Daha fazla bilgi için Sesli İşlemler dokümanlarına bakın.
Z sırası dikkat edilmesi gereken noktalar
Bir asistan, geçerli etkinliğin üstünde gösterilen hafif bir yer paylaşımlı pencere kullanır. Kullanıcı istediği zaman asistanı etkinleştirebileceği için Şekil 4'te gösterildiği gibi yer paylaşımlı pencereye müdahale eden kalıcı sistem uyarısı pencereleri oluşturmayın.

Şekil 4. Destek katmanı Z sırası
Uygulamanız, sistem uyarısı pencereleri kullanıyorsa bunları hemen kaldırın. Zira bu pencereleri ekranda bırakmak kullanıcı deneyimini olumsuz etkiler.
Hedef uygulama
Asistan uygulamaları, genellikle hedef uygulamaları bulmak için derin bağlantıdan yararlanır. Uygulamanızı potansiyel bir hedef uygulama haline getirmek için derin bağlantı desteği eklemeyi düşünebilirsiniz. Mevcut kullanıcı bağlamı ile derin bağlantılar veya yer paylaşımlı pencerede gösterilen (Şekil 1'deki 3. adımda gösterilmektedir) diğer potansiyel işlemler arasındaki eşleşme, Google Asistan'ın uygulamasına özeldir. Örneğin Google Asistan Uygulaması, trafiği hedef uygulamalara yönlendirmek için derin bağlantıyı ve Uygulama Bağlantıları'nı kullanır.
Kendi Asistanınızı Kullanma
Kendi asistanınızı kullanmak isteyebilirsiniz. Şekil 2'de gösterildiği gibi kullanıcı, etkin asistan uygulamasını seçebilir. Asistan uygulaması,
bu VoiceInteraction
örneğinde gösterildiği gibi VoiceInteractionSessionService
ve VoiceInteractionSession
özelliklerini sağlamalıdır. BIND_VOICE_INTERACTION
izni de gerektirir. Böylece asistan, onHandleAssist()
içindeki AssistStructure
örneği olarak temsil edilen metni ve görünüm hiyerarşisini alabilir.
Ekran görüntüsünü onHandleScreenshot()
üzerinden alır.