Android dokunma teknolojisi API referansı

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:

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:

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.