Android dokunma teknolojisi API referansı

Bu bölümde, Android'de bulunan çeşitli dokunma teknolojisi API'lerine giriş yapılacaktır. Ayrıca, dokunsal efektlerinizin istediğiniz gibi çalıştığından emin olmak için gerekli cihaz desteğini ne zaman ve nasıl kontrol edeceğiniz de anlatılmaktadır.

Dokunsal efektleri oluşturmanın birkaç farklı yolu vardır ve bunlardan seçim yaparken Android dokunma teknolojisi tasarım ilkelerini dikkate almak önemlidir. Aşağıdaki tabloda, her bir yaklaşımın bu üst düzey özellikleri özetlenmiştir:

  • Kullanılabilirlik, davranış yedeği planlanırken özellikle önemlidir ve bağımsız cihaz desteğinin kontrol edilmesiyle birleştirilmelidir.
  • Net dokunma teknolojisi, kullanıcılar için daha az rahatsız edici bir berrak ve berrak histir.
  • Zengin dokunma teknolojisi daha fazla ifade gücüne sahiptir ve genellikle daha fazla özelliğe sahip donanım gerektirir.
API yüzeyi Kullanılabilirlik Net dokunma teknolojisi Zengin dokunma teknolojisi
Dokunsal Geri BildirimSabitler Android 1.5+
(sabit başına)
Önceden Tanımlanmış Titreşim Efekti Android 10 ve sonraki sürümler
Titreşim Efekti Kompozisyonu Android 11 ve sonraki sürümler (sabit başına)
Açma/kapatma, tek seferlik ve dalga biçimi titreşimleri Android 1

Ayrıca, bu sayfada açıklanan bildirim API'leri, gelen bildirimler için oynatılan dokunsal efektleri ö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 dokunsal efektlere olanak tanır, ancak tüm cihazlar tarafından desteklenmez.
  • VibrationAttributes(), titreşimi kullanımına göre sınıflandırmanıza yardımcı olarak uygun kullanıcı ayarlarının uygulanmasını sağlar, böylece kullanıcının sürprizlerini önler.

HapticFeedbackConstants

HapticFeedbackConstants sınıfı, her uygulamanın ortak işlemler için farklı efektlerine sahip olması yerine, uygulamaların cihaz deneyimi genelinde tutarlı dokunsal geri bildirim eklemesine olanak tanımak için işleme dayalı sabit değerler sağlar.

Uyumluluk ve gereksinimler

View.performHapticFeedback yöntemini bu sabit değerlerle kullanmak uygulama için herhangi bir özel izin gerektirmez. Bu özellik, View.hapticFeedbackEnabled özelliğine tabidir. Bu özellik, false değerine ayarlanırsa varsayılanlar da dahil olmak üzere görünümdeki tüm dokunsal geri bildirim çağrılarını devre dışı bırakır. View.hapticFeedbackEnabled özelliğinin birincil ayarı, false olarak ayarlanırsa görünümdeki tüm dokunsal geri bildirim çağrılarını (varsayılanlar dahil) devre dışı bırakır. Bu yöntem aynı zamanda kullanıcının dokunma geri bildirimini etkinleştiren sistem ayarına da uyar.

Uyumluluk açısından dikkat edilmesi gereken tek nokta, işlem için belirli sabit değerin SDK düzeyidir.

HapticFeedbackConstants kullanılırken yedek davranışı sağlamanıza gerek yoktur.

HapticsFeedbackConstants kullanımı

HapticFeedbackConstants kullanımıyla ilgili ayrıntılar için Etkinliklere dokunsal geri bildirim ekleme bölümüne bakın.

Önceden tanımlanmış VibrationEffect

VibrationEffect sınıfı; CLICK, TICK ve DOUBLE_CLICK gibi önceden tanımlanmış çeşitli sabit değerler sağlar. Bu efektler cihaza göre optimize edilebilir.

Uyumluluk ve gereksinimler

Herhangi bir VibrationEffect oyununun oynatılabilmesi için uygulama manifestindeki VIBRATE izni gereklidir.

Cihaz için optimize edilmiş bir uygulaması olmayan sabit değerler standart bir platform yedeğine geri döndüğünden, önceden tanımlanmış VibrationEffect kullanırken yedek davranışı sağlamanıza gerek yoktur.

Vibrator.areEffectsSupported ve Vibrator.areAllEffectsSupported API'leri, cihaz için optimize edilmiş uygulama olup olmadığını belirlemek içindir. Önceden tanımlanmış efektler, optimize edilmiş bir uygulama olmadan da kullanılabilir ve standart platform yedeğini kullanır. Sonuç olarak, bu areEffectsSupported API'leri yalnızca uygulama, etkinin cihaz için optimize edilip edilmediğini dikkate almak istediğinde gereklidir.

Efekt kontrol yöntemleri şu üç değerden birini döndürebilir:

UNKNOWN değeri, kontrol API'sinin kullanılamadığını belirttiğinden genellikle tüm efektler için döndürülür veya hiçbiri için döndürülür. Bu cihazlar dinamik olarak yedeklenir.

Önceden tanımlanmış VibrationEffect kullanımı

Önceden tanımlanmış bir VibrationEffect kullanımıyla ilgili ayrıntılar için Dokunsal geri bildirim oluşturmak için önceden tanımlanmış bir VibrationEffect kullanma başlıklı makaleyi inceleyin.

VibrationEffect beste

VibrationEffect bileşimi, VibrationEffect.startComposition API kullanılarak oluşturulan bir titreşim efektidir. Bu API, özelleştirilmiş gecikme ve yoğunluklara sahip bir temel öğeler dizisi oluşturarak ifade gücü yüksek zengin dokunma teknolojisine olanak tanır. Bununla birlikte, genel bir deneyimden kaçınmak için cihazın, birleştirilen özellikleri desteklediğinden emin olmaya özen gösterin.

Uyumluluk ve gereksinimler

Herhangi bir VibrationEffect oyununun oynatılabilmesi için uygulama manifestindeki VIBRATE izni gereklidir.

Tüm cihazlar, Beste API'sinin tüm özelliklerini desteklemez ve temel öğelerin kullanılabilir olduğundan emin olmak önemlidir.

Temel titreşim desteğini kontrol etme

Temel destek, Vibrator.arePrimitivesSupported yöntemi kullanılarak alınabilir. Alternatif olarak, bir temel öğe grubu Vibrator.areAllPrimitivesSupported yöntemi kullanılarak birlikte kontrol edilebilir. Bu, primitif desteğin AND-ayarlanmasıyla eşdeğerdir.

VibrationEffect Beste kullanımı

VibrationEffect kompozisyonlarını kullanmayla ilgili ayrıntılar için Titreşim kompozisyonları oluşturma başlıklı makaleye bakın.

Açık-kapalı, tek seferlik ve dalga biçimi titreşimleri

Android'de desteklenen en eski titreşim biçimi, yapılandırılabilir sürelere sahip basit titreşim açma/kapatma kalıplarıdır. Bu API'ler, doğal dokunma teknolojisi üretebildikleri için genellikle dokunma tasarım ilkeleri ile pek uyumlu değildir. Ancak son çare dışında bunlardan kaçının.

Açık/kapalı titreşimlerin en yaygın kullanım alanı bildirimlerdir. Burada ne olursa olsun belirli bir titreşim istenir. Dalga biçimi titreşimleri de bir zil sesi tahmin edebileceğiniz gibi, bir desenin süresiz olarak tekrar etmesini sağlar.

Tek çekim deseni, N milisaniye boyunca bir kez titreşimi ifade eder.

İki tür dalga biçimi modeli vardır:

  • Yalnızca zamanlamalar. Bu dalga biçimi türü, harcanan alternatif sürelerin ve harcanan sürelerin bir açıklamasıdır. Zamanlamalar harcanan süreyle başlar. Sonuç olarak, dalga formu kalıpları genellikle titremeye hemen başlamak için sıfır değeriyle başlar.
  • Zamanlamalar ve genlikler. Bu dalga formu türünde, ilk biçimin dolaylı yoldan açılması yerine her zamanlama şekliyle eşleşecek ek bir genlik dizisi vardır. Ancak istenen ölçeklendirmenin gerçekleştirilebilmesi için cihazın bolluk kontrolünü desteklediğini kontrol etmek önemlidir.

Uyumluluk ve gereksinimler

Açık ve kapalı titreşimler en eski titreşim biçimi olduğundan bunlar, bu sayfanın ilerleyen bölümlerinde açıklandığı gibi titreşimli neredeyse tüm cihazlarda desteklenir.

VibrationEffect veya daha eski stildeki vibrate çağrılarını oynatmak için uygulama manifest dosyasında VIBRATE izni gerekir.

Dalga biçiminde farklı genlik değerleri kullanırken cihazın genlik kontrolünü desteklemesini önemle tavsiye ederiz.

Genişlik denetimi desteğini kontrol etme

Sıfır olmayan genlik değerleri, genlik kontrolü olmayan cihazlarda% 100'e yuvarlanır. Bu nedenle, Vibrator.hasAmplitudeControl kullanarak desteğin mevcut olup olmadığını kontrol etmek önemlidir. Daha fazla ayrıntı için genlik denetimi konusuna bakın.

Etkinizin genlik kontrolü olmadan yeterli kaliteye sahip olup olmadığını dikkatlice değerlendirmelisiniz. Açıkça tasarlanan bir açma-kapama titreşimine geri dönmek daha iyi olabilir.

Açık/kapalı titreşimlerin kullanımı

Yeni SDK seviyelerinde tüm titreşim modları tek bir anlamlı VibrationEffect sınıfında birleştirildi. Bu sınıfta bu basit titreşimler VibrationEffect.createOneshot veya VibrationEffect.createWaveform kullanılarak oluşturuluyordu.

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 biçimlerin tümü, daha önce açıklandığı gibi temel bir açma/kapatma dalga formu kalıbına sahiptir. Burada ilk giriş, titreşimin açılmasından ö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) kaynağından boş olmayan bir Vibrator sınıfı edinebilirsiniz. Cihazda titreşim yoksa titreşim API'lerine yapılan çağrıların herhangi bir etkisi olmaz. Bu nedenle uygulamaların, tüm dokunma teknolojisini belirli bir koşulda sınırlaması gerekmez. Ancak gerekirse uygulama, bunun gerçek titreşim mi (true) yoksa saplama mı (false) olduğunu belirlemek için hasVibrator() yöntemini çağırabilir.

Kullanıcı dokunma dokunma teknolojisini devre dışı bıraktı mı?

Bazı özel uygulamalar, kullanıcının Android'in Dokunma geri bildirimi ayarını tamamen devre dışı bırakıp bırakmadığını manuel olarak kontrol etmeyi gerektirebilir. Bu durumda, dokunma geri bildirimi efektlerinin devre dışı bırakılması gerekir. Bu ayar, HAPTIC_FEEDBACK_ENABLED anahtarı kullanılarak sorgulanabilir. 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çimindedir) sağlanabilir. Arka plan kullanımı için yalnızca dikkate dayalı dokunma teknolojisi desteklendiğinden bu işlem, uygulamanız arka plandayken titreşim başlatırken gereklidir.

AudioAttributes oluşturulması sınıf belgelerinde ele alınmıştır ve ses yerine titreşim olarak düşünülmelidir.

Kılavuz olarak, çoğu durumda içerik türü CONTENT_TYPE_SONIFICATION'dir. Kullanım, ön planda dokunma geri bildirimi için USAGE_ASSISTANCE_SONIFICATION veya arka plandaki bir alarm için USAGE_ALARM gibi değerler olabilir. Ses işaretlerinin titreşimler üzerinde etkisi yoktur.

Genlik kontrolü

Titreşimin genlik denetimi varsa çeşitli yoğunluklarda titreşimler çalabilir. Bu, zengin dokunma teknolojisi üretmek ve varsayılan dokunsal yoğunluklarının kullanıcı tarafından kontrol edilebilmesini sağlamak açısından önemli bir özelliktir.

Genlik denetimi desteği, Vibrator.hasAmplitudeControl çağrısı yapılarak kontrol edilebilir. Bir titreşim genlik desteği yoksa tüm genlik değerleri, sıfır/sıfır olmayan olup olmamalarına bağlı olarak kapalı/açık olarak eşlenir. Sonuç olarak, çeşitli genliklere sahip zengin dokunma teknolojisi kullanan uygulamalar, cihaz genlik kontrolüne sahip değilse bunları devre dışı bırakmayı düşünmelidirler.