Bu bölümde, Android'de kullanılabilen çeşitli dokunma API'leri hakkında bilgi verilmektedir. Ayrıca, dokunma etkilerinizin istediğiniz gibi oynatılmasını sağlamak için gerekli cihaz desteğini ne zaman ve nasıl kontrol edeceğinizi de kapsar.
Dokunma etkileri oluşturmanın birkaç farklı yolu vardır. Bu yöntemler arasından seçim yaparken Android dokunma tasarım ilkelerini dikkate almanız önemlidir. Aşağıdaki tabloda her yaklaşımın bu üst düzey özellikleri özetlenmiştir:
- Kullanılabilirlik, özellikle davranış yedeği planlanırken önemlidir ve cihaz desteğinin tek tek kontrol edilmesiyle birlikte değerlendirilmelidir.
- Net dokunma hissi, kullanıcılar için daha az rahatsız edici olan net ve temiz bir his verir.
- Zengin dokunma teknolojisi daha etkileyicidir ve genellikle daha fazla özellikli donanım gerektirir.
API yüzeyi | Kullanılabilirlik | Net dokunma | Zengin dokunma teknolojisi |
---|---|---|---|
HapticFeedbackConstants | Android 1.5 ve sonraki sürümler (sabit değer başına) |
||
Önceden tanımlanmış VibrationEffect | Android 10 ve sonraki sürümler | ||
VibrationEffect Composition | Android 11 ve sonraki sürümler (sabit değer başına) | ||
Açık/kapalı, tek seferlik ve dalga biçimi titreşimleri | Android 1 |
Ayrıca bu sayfada açıklanan bildirim API'leri, gelen bildirimler için çalınan dokunma etkilerini özelleştirmenize olanak tanır.
Bu sayfada, API platformlarını kapsayan ek kavramlar da açıklanmaktadır:
- Cihazda titreşim var mı?
- Genlik kontrolü, daha yumuşak ve daha zengin dokunma etkileri sağlar ancak tüm cihazlar tarafından desteklenmez.
VibrationAttributes()
, titreşimi kullanıma göre sınıflandırmanıza yardımcı olur. Böylece, titreşime uygun kullanıcı ayarlarının uygulanmasını sağlayarak kullanıcının sürprizlerle karşılaşmasını önler.
HapticFeedbackConstants
HapticFeedbackConstants
sınıfı, uygulamaların ortak işlemler için farklı efektler kullanması yerine cihaz deneyiminde tutarlı olan dokunma geri bildirimi eklemesine olanak tanımak amacıyla işleme dayalı sabitler sağlar.
Uyumluluk ve koşullar
Bu sabitlerle View.performHapticFeedback
yöntemini kullanmak için uygulamanın özel izinlere sahip olması gerekmez. Bu yöntem, View.hapticFeedbackEnabled
mülküne tabidir. Bu mülk false
olarak ayarlanırsa varsayılan olanlar da dahil olmak üzere görünümdeki tüm dokunma geri bildirimi çağrıları devre dışı bırakılır. Bu yöntemle ilgili birincil ayar, View.hapticFeedbackEnabled
mülküdür. Bu mülk false
olarak ayarlanırsa varsayılan olanlar da dahil olmak üzere görünümdeki tüm dokunma geri bildirimi çağrıları devre dışı bırakılır. Bu yöntem, kullanıcının dokunma geri bildirimini etkinleştirmeyle ilgili sistem ayarını da dikkate alır.
Uyumluluk açısından tek dikkat edilmesi gereken nokta, işleme ait sabitin SDK düzeyidir.
HapticFeedbackConstants
kullanılırken yedek davranış sağlamaya gerek yoktur.
Kullanım: HapticsFeedbackConstants
HapticFeedbackConstants
simgesini kullanma hakkında ayrıntılı bilgi için Etkinliklere dokunma geri bildirimi ekleme başlıklı makaleyi inceleyin.
Önceden tanımlanmış VibrationEffect
VibrationEffect
sınıfı, CLICK
, TICK
ve DOUBLE_CLICK
gibi önceden tanımlanmış çeşitli sabitler sağlar. Bu efektler cihaz için optimize edilmiş olabilir.
Uyumluluk ve koşullar
VibrationEffect
oynamak için uygulama manifestinde VIBRATE
izni gerekir.
Cihaz için optimize edilmiş bir uygulamaya sahip olmayan sabitler standart bir platform yedeği olarak geri döndüğü için, önceden tanımlanmış VibrationEffect
kullanılırken yedek davranış sağlamaya gerek yoktur.
Vibrator.areEffectsSupported
ve Vibrator.areAllEffectsSupported
API'leri, cihaz için optimize edilmiş bir uygulama olup olmadığını belirlemek için kullanılır.
Önceden tanımlanmış efektler, optimize edilmiş bir uygulama olmadan da kullanılabilir ve standart platform yedeği kullanılır. Bu nedenle, bu areEffectsSupported
API'leri yalnızca bir uygulama, efektin cihaz için optimize edilip edilmediğini dikkate almak istiyorsa gereklidir.
Etki kontrol yöntemleri üç değerden birini döndürebilir:
VIBRATION_EFFECT_SUPPORT_YES
, cihazın bu efekt için optimize edilmiş destek sunduğunu gösterir.VIBRATION_EFFECT_SUPPORT_NO
, cihazın optimize edilmiş destek sunmadığını ancak platform yedeğini kullanmaya devam ettiğini gösterir.VIBRATION_EFFECT_SUPPORT_UNKNOWN
, sistemin uygulamanın optimize edilip edilmediğini bilmediğini gösterir.
UNKNOWN
değeri, kontrol API'sinin kullanılamadığını gösterdiğinden genellikle tüm efektler veya hiçbir efekt için döndürülür. Bu cihazlar dinamik olarak yedek seçeneğe geçer.
Önceden tanımlanmış VibrationEffect
kullanımı
Önceden tanımlanmış bir VibrationEffect
kullanma hakkında ayrıntılı bilgi için Dokunsal geri bildirim oluşturmak için önceden tanımlanmış bir VibrationEffect
kullanma başlıklı makaleyi inceleyin.
VibrationEffect
beste
VibrationEffect
kompozisyonu, VibrationEffect.startComposition
API kullanılarak oluşturulan bir titreşim efektidir. Bu API, özelleştirilmiş gecikmeler ve yoğunluklarla bir dizi primitif oluşturarak etkileyici zengin dokunma deneyimleri sunar. Ancak genel deneyimin tutarlı olmasını sağlamak için cihazın birleştirilen özellikleri desteklediğinden emin olun.
Uyumluluk ve koşullar
VibrationEffect
oynamak için uygulama manifestinde VIBRATE
izni gerekir.
Tüm cihazlar, kompozisyon API'sinin tüm özelliklerini desteklemez. Bu nedenle, ilkellerin kullanılabilir olduğundan emin olmanız önemlidir.
Titreşim desteği olup olmadığını kontrol edin
Temel birim başına destek, Vibrator.arePrimitivesSupported
yöntemi kullanılarak alınabilir. Alternatif olarak, Vibrator.areAllPrimitivesSupported
yöntemi kullanılarak bir dizi primitif birlikte kontrol edilebilir. Bu, primitif başına desteği AND
ile kontrol etmeye eşdeğerdir.
VibrationEffect
kompozisyonlarının kullanımı
VibrationEffect
kompozisyonlarını kullanma hakkında ayrıntılı bilgi için Titreme kompozisyonları oluşturma başlıklı makaleyi inceleyin.
Açma/kapatma, tek seferlik ve dalga biçimi titreşimleri
Android'de desteklenen en eski titreşim biçimi, yapılandırılabilir süreleri olan basit titreşim açma/kapatma kalıplarıdır. Bu API'ler genellikle vızıltılı dokunma hissi oluşturabileceğinden dokunma tasarımı ilkeleriyle uyumlu değildir. Yalnızca son çare olarak bu API'leri kullanın.
Açık/kapalı titreşimler için en yaygın kullanım alanı, her ne olursa olsun titreşim istenilen bildirimlerdir. Dalgalı titreşimler, bir zil sesinde de tahmin edebileceğiniz gibi, bir kalıbın sonsuz şekilde tekrarlanmasını sağlar.
Tek seferlik kalıp, N milisaniye boyunca bir kez titreşmeyi ifade eder.
İki tür dalga biçimi deseni vardır:
- Yalnızca zamanlamalar. Bu tür dalga biçimi, cihazın açık ve kapalı olduğu sürelerin dönüşümünü gösteren bir açıklamadır. Zamanlamalar, kapalı durumda geçirilen süreyle başlar. Sonuç olarak, dalga biçimi kalıpları genellikle titreşimin hemen başlayacağını belirtmek için sıfır değerle başlar.
- Zamanlamalar ve genlikler. Bu tür dalga biçiminde, ilk formun örtülü açma/kapatma yerine her zamanlama figürüyle eşleşecek ek bir genlik dizisi bulunur. Ancak istenen ölçeklendirmenin sağlanabilmesi için cihazın amplitüd kontrolünü destekleyip desteklemediğini kontrol etmek önemlidir.
Uyumluluk ve koşullar
Açma/kapatma titreşimleri en eski titreşim biçimi olduğundan bu sayfanın ilerleyen bölümlerinde açıklandığı gibi, titreşime sahip hemen hemen tüm cihazlarda desteklenir.
VibrationEffect
veya eski tarz vibrate
çağrıları çalmak için uygulama manifest dosyasında VIBRATE
izninin verilmesi gerekir.
Bir dalga biçiminde farklı genlik değerleri kullanırken cihazın genlik kontrolünü desteklemesini önemle tavsiye ederiz.
Genlik kontrolü desteği olup olmadığını kontrol etme
Genlik kontrolü olmayan cihazlarda sıfır olmayan genlik değerleri% 100'e yuvarlanır. Bu nedenle, Vibrator.hasAmplitudeControl
kullanarak desteğin olup olmadığını kontrol etmek önemlidir. Daha fazla bilgi için amplitüde denetimine bakın.
Etkilerinizin, genlik kontrolü olmadan yeterli kalitede olup olmadığını dikkatlice değerlendirmeniz gerekir. Açıkça tasarlanmış bir açma/kapatma titreşimi kullanmak daha iyi olabilir.
Açık/kapalı titreşimlerin kullanımı
Yeni SDK düzeylerinde tüm titreşim modları, bu basit titreşimlerin VibrationEffect.createOneshot
veya VibrationEffect.createWaveform
kullanılarak oluşturulduğu tek bir etkileyici VibrationEffect
sınıfında birleştirildi.
Bildirim API'leri
Uygulama bildirimlerinizi özelleştirirken her bildirim kanalıyla bir kalıp ilişkilendirmek için aşağıdaki API'lerden birini kullanabilirsiniz:
- AndroidX
- Android
NotificationChannel.setVibrationPattern
- (kullanımdan kaldırıldı)
NotificationBuilder.setVibrate
Bu formların tümü, daha önce açıklandığı gibi temel bir açma/kapatma dalga biçimi kalıbı kullanır. İlk giriş, titreştiriciyi açmadan önceki gecikmedir.
Genel kavramlar
Yukarıda ayrıntılı olarak açıklanan API yüzeylerinde çeşitli kavramlar geçerlidir.
Cihazda titreşim var mı?
context.getSystemService(Vibrator.class)
'dan boş olmayan bir Vibrator
sınıfı elde edebilirsiniz. Cihazda titreşim motoru yoksa titreşim API'lerine yapılan çağrıların hiçbir etkisi olmaz. Bu nedenle, uygulamaların tüm dokunma geri bildirimlerini bir koşula bağlaması gerekmez. Ancak gerekirse bir uygulama, bunun gerçek bir titreşim motoru (true
) mu yoksa bir taslak (false
) mı olduğunu belirlemek için hasVibrator()
çağrısı yapabilir.
Kullanıcı dokunma dokunma teknolojisini devre dışı bıraktı mı?
Bazı özel uygulamalarda, kullanıcının Android'in Dokunma geri bildirimi ayarını tamamen devre dışı bırakıp bırakmadığını manuel olarak kontrol etmeniz gerekebilir. Bu durumda dokunma geri bildirimi efektleri engellenmelidir. Bu ayar, HAPTIC_FEEDBACK_ENABLED
anahtarı kullanılarak sorgulanabilir. Bu anahtarda sıfır değeri devre dışı anlamına gelir.
Titreşim özellikleri
Sistemi titreşimin amacı hakkında bilgilendirmek için titreşim özellikleri (şu anda AudioAttributes
biçiminde) sağlanabilir. Arka plan kullanımı için yalnızca dikkat çeken dokunma teknolojisi desteklendiğinde, uygulamanız arka plandayken titreşim başlatırken bu gereklidir.
AudioAttributes
sınıfının oluşturulması, sınıf dokümanlarında ele alınmıştır ve ses yerine titreşim olarak düşünülmelidir.
Çoğu durumda içerik türü CONTENT_TYPE_SONIFICATION
'tür ve kullanım, ön planda dokunma geri bildirimi için USAGE_ASSISTANCE_SONIFICATION
veya arka planda alarm için USAGE_ALARM
gibi değerler olabilir. Ses işaretlerinin titreşimler üzerinde hiçbir etkisi yoktur.
Genlik kontrolü
Titreşim cihazında genlik kontrolü varsa farklı yoğunluklarda titreşimler çalabilir. Bu, zengin dokunma deneyimleri oluşturmak ve kullanıcıların varsayılan dokunma yoğunluklarını kontrol etmesine olanak tanımak için önemli bir özelliktir.
Genlik kontrolü desteği, Vibrator.hasAmplitudeControl
çağrısı yapılarak kontrol edilebilir. Bir titreşicide genlik desteği yoksa tüm genlik değerleri, sıfır/sıfır olmayan değerlerine göre kapalı/açık olarak eşlenir. Sonuç olarak, cihazda genlik kontrolü yoksa değişen genliklere sahip zengin dokunma teknolojisini kullanan uygulamalarda bu özelliği devre dışı bırakmayı düşünmeniz önerilir.