落格輸入法是如何實現按鍵音的

眾所周知,落格輸入法不需要獲取“完全訪問權限“,所以根據蘋果的權限,自然就無法播放按鍵音了。

不過,最近的落格輸入法更新中加入了這一功能——在後續的版本中甚至可以加入按鍵震動了。然而我還是無需獲取“完全訪問權限”。

那麼,我是怎麼做到的呢?

iOS 裡的聲音和震動

其實是同一回事。在 iOS 裡,震動其實也是聲音,也就是說,首先,只要能播放聲音,就可以震動,因為在 iOS 的 api 裡,震動也是聲音——即聲音的一種。

播放聲音

iOS 中播放按鍵音其實也是播放聲音,那麼我們可以有這些方法達到目的:

  1. 使用AudioToolbox
  2. 使用 AVFoundation
  3. 直接用 tock.caf 這個文件
  4. 使用系統自帶的 的UIDevice.currentDevice().playInputClick()

不過如你所見,它們都是需要完全訪問權限才能播放的——但是!

1、使用 AudioToolbox 來播放系統聲音其實是不需要權限的!

所以,我們要做的就是找到系統鍵盤按下的聲音代碼即可。

不同 iOS 版本 鍵盤聲不同

由於我們直接去播放聲音代碼,不同版本聲音代碼不同,所以這也是為什麼官方的播放鍵盤音用的是一個方法, 的UIDevice.currentDevice().playInputClick() ,顯然,如果你使用的系統版本過低,那麼是無法聽到鍵盤音的,我也不知道是因為需要權限,還是根本就沒有這個聲音代碼。

總之,這裡我給出所有我找到的聲音代碼,如果你的鍵盤也需要,就可以嘗試一下。

如何使用

首先,導入 AudioToolbox 框架 進口 AudioToolbox ,然後,在你需要播放鍵盤音的地方,比如響應按鍵事件的地方,調用 AudioServicesPlaySystemSound(1123) 即可。

值得一提的是:為了避免堵住主線程,你可能需要在子線程裡去播放它——這樣又可能導致某些情況下按鍵音跟不上節奏。

接下來我給出我找到的所有聲音(震動)代碼,都是基於 iOS 10 的,所以舊版本不一定好用。——但至少好處是不需要“完全訪問”權限了對吧?

  • 1123——鍵盤字母按鈕按下聲音;
  • 1155——退格鍵聲音;
  • 1156——其他鍵盤功能鍵聲音;
  • 1519——6s peek 震動效果;
  • 1520——6s pop 震動效果;
  • 1521——6s 三連震 震動效果。

關於 iPhone 7

7系列有更高級的微震動,這個由於我沒有對應的設備所以無法測試其接口是否能用,這個只能日後有空再來測試了。

其他討論

如你所見,只要把聲音代碼改成震動代碼,就可以在6s機器上實現按鍵震動了,實測打字慢一點的話用 peek 的效果也還挺不錯的——費電不費電就不得而知了。

我目前在落格上僅僅在長按、上下點劃上用了震動。

目前遇到的問題比如不能像系統鍵盤那樣按下按鈕就響——這個是邏輯處理問題,後續可以優化流程。

不能像系統鍵盤那樣快速輸入時取消前面的播放,這就導致你連續快速按兩次按鈕的話,可能只播放一次按鍵音;震動同理。

後續有空了再研究,就這麼多。

本文由 落格博客 原創撰寫:落格博客 » 落格輸入法是如何實現按鍵音的

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2740.html

由...出版 落格博客

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

2 註釋

您的電子郵件地址不會被公開. 必填字段標 *