オマケ:keymapper解説(物理キーボードからの出力を自在に操れる)
★アプリ解説:keymapper
keymapperの仕様です。
https://play.google.com/store/apps/details?id=io.github.sds100.keymapper
音量ボタンや外部キーボードからの入力を
好き勝手弄れます。
画面がオフのときは発動しません。
分からない所ありましたらどうぞ。
随時追記します。
事前注意
・shizuku併用がベスト
https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api
ADB通して入れてくださいね。
(ADBの通し方は前の項目をどうぞ)
(というか、Shizukuを入れないと
keymapperのIMEでしか動かない
→キーコードを発行できても
英字でしか入力されない
→つまり、ほとんど意味がない)
・taskerやmacrodroidの相性が悪いので
ショートカットで引用しないこと。
(Broadcast発行のIntentでやり取りするのが吉)
・Taskerで音量ボタンの
長押しプロファイルでタスクを
組んでいると、keymapperとかち合って
長押しプロファイルが効かなくなることがあります。
keymapperをオフにしてても、音量ボタンに設定を
割り振ってなくてもかち合っちゃうっぽいです。
各項目説明
「トリガー」
・長押しの処理
長押し(短)→長押し(長)は入力が上書きされない。
例1
①トリガーキー:A(Long press)
アクション:キーコード7(0)
Option(delay:300ms)
②トリガーキー:A(Long press)
アクション:キーコード8(1)
Option(delay:400ms)
この2つのリマップがある場合
300ms長押しで「0」が
400ms長押しで「01」が入力される。
単押し→長押しは入力を単押しから
長押しに上書きできる。
例2
①トリガーキー:A
アクション:キーコード7(0)
②トリガーキー:A(Long press)
アクション:キーコード8(1)
Option(delay:400ms)
この2つのリマップがある場合
単押しで「0」が
400ms長押しで「1」が入力される。
携帯の音量ボタンだと入力が強いですが
bluetoothキーボードだと不安定で
複数組むとバグって地(元のキー)が出ます。
・ダブルクリックの処理
使えることは使える…けど
Bluetoothキーボードからだと
どうしてもラグい。
→いっそkcmで元キーを意味のないキーにして
順序押しの周期短くして使ったほうが良さそう。
・同時押しの処理
これが一番正確。順序を入れ替えることで逆にもできる。
例3
キーA+キーB → キーC発行
(Aを押しながらBを押すとキーCが入力される)
キーB+キーA → キーC発行
(Bを押しながらAを押すとキーCが入力される)
・シークエンス(順番押し)の処理
①トリガーキー:A→B
アクション:キーコード7(0)
②トリガーキー:A
アクション:キーコード8(1)
これも長押し同様に、上書きされないまま
「10」と入力される。
んじゃあ元キーをdo nothingにすれば?
→出来はするけどバグりやすい。
kcmで元キーを意味のないキーに
変換したほうが安全だと思います。
「アクション」
・input keyevent
キーコードを入力します。
IMEが日本語なら日本語で入力できます。
当然変換も可能です。
(ただし、Shizukuを併用する必要アリ)
修飾キーもつけられますが
例えばkeycode 46(r)で
ctrlに✓を入れて
ctrl+rを発行しようとしても
発動しないことがあります。
この場合、アプリ・もしくはAndroidのどちらかが
その特殊キーの発行に対応していません。
(たしか、android9やandroid10とかで
エラー吐いてたような気が…)
こういうときはtaskerの方の
「キーボード」アクションを使えば動きます。
あと、taskerやmacrodroidの
ショートカットに組み込んでる時も
動作が怪しかったような…
(だから、Intentの送受信で
なんとかする必要があったんですね)
・タップ
座標指定でタップしてくれる。
座標がわからない?ご安心を。
スクショを読み込ませることで
自動でX.Y座標を取得してくれます。
(ただし、当然使ってるスマホと
同じ解像度じゃなきゃダメです)
(使ってるスマホの解像度が
2340×1080なのに
600×400の画像なんて
読ませられない訳ですね)
・send intent
インテントを投げられます。
taskerやmacrodroidの連携には
必要不可欠です。
〜〜〜〜〜〜以下、intentの種類〜〜〜〜〜
①Activity
他のアプリの動作を呼び出せます。
「can't be empty!」のところに
適当に文字入れて
項目は「Activity」を選択。
あとは「Choose Activity」ボタンから
目当てのインテントを探すだけです。
②Broadcast receiver
Taskerやmacrodroidに
インテントを投げ、作動させる
ことができます。
「can't be empty!」のところに
適当に文字入れて
項目は「Broadcast receiver」を選択。
記載例は…taskerの「インテント受信」のプロファイルを
https://kakuyomu.jp/works/16817330663198601284/episodes/16817330665899079781
受け取れるようにするには、こう書きます。
──────────────────────────
description for keymapper(keymapperでの名前)→tekitou
送信方法→broadcast
Action→nanka.tekitouna.MOJI
category・data・flag→「なし」
package→net.dinglisch.android.taskerm(taskerで受け取るので)
class→「なし」
──────────────────────────
・do nothing
元のキーを無効にする。
他のリマップ(上書き)を
重ねすぎると動作しなく
なるときがあったり…
・テキスト入力
指定のテキストを入力します。
ただし、IMEがkeymapper GUIの
時しか発動できません。
なので、ADBでシステム設定の変更の認可
(pm grant io.github.sds100.keymapper android.permission.WRITE_SECURE_SETTINGS)
を与え、キーボード変更ができるようにしてから
こういうタスクを組みます。
①トリガーキー:A(Long press)
アクション:IME変更(keymapper)
Option(delay:50ms)
②トリガーキー:A(Long press)
アクション:テキスト入力(てきすと)
アクション:IME変更(Gboard)
Option(delay:100ms)
こうすることによってダブルタップで
「てきすと」と入力することができます。
(通常だと1度で出力してくれるはずだが
この場合はダブルタップじゃないと無理っぽい)
「作動条件(Constraint)」
作動する条件を指定できます。
〇〇というアプリが
フォアグラウンド(作動している)時
とかいう風ですね。
条件式はorとandが使えます。
「オプション」
特段、解説するところはなし。長押しの時間指定くらいだし
keymapperのショートカットはバグるため基本使わない。
以下補足事項。
・コードの強弱。
キーコードにも強弱があります。基本的にAndroidのキーのやり取りは
物理入力→GUI(kcm)→IME(入力アプリ)→システム→keymapper
と変換しながら受け渡されるので
ADB発行(kcmやIMEがなんだろうと指定のキーを発行できる)
>kcm発行キー(同時押しによる特殊キー発行が可能)
>keymapper(一部の特殊キーが発行できない・上書きが行えない)
となるわけです。
で、kcmはおいといてkeymapperの方ですが
例を上げるとshiftキーが分かりやすいですね。
Shift自体をdo nothingとして
shift+Aで「←」(keycode 20)を
発行できるようにしたとしましょう。
この時点でのキーボードのキーは
shift=ナシ
shift+A=「←」のハズですが
しかし、keymapperの権限が弱いため
shiftを上書きすることができず
結果として発行されるのは「shift+←」(左選択)
になってしまうわけです。
capsとかAltとか(ctrlはどうだっけ…?)も同じで
do nothing にしても元のキーが
消えない&誤作動の危険があるため
迂闊にはリマップ(上書き)できません。
ちなみにfnに至っては
トリガーで検知されない(≒上書きできない)上に
kcmでも変更出来ません。
あのキーだけ特殊なんですよね。
あ、ちなみにキー発行とキー上書きは別で
他のキーをctrlやshiftに置き換えるのは
大丈夫だった(はず)です。
(でもたしか、Androidのバージョンが
〜10だと反応しなかった覚えが…)
(それはそうとしてショートカットだから
元のキーが悪さすると怖い、というのも…)
同時押しなら多分誤動作も少なそうじゃありますが…
素直に根本であるkcm弄ったほうが安全だと思います。
以下Q&A
・トリガーが壊れた
設定→アプリ情報から1度アプリを停止。
・英字入力になるんだけど…
IMEかもしくはcapslockのせい。
(だから、kcmでcapsを他のキーに
変更する必要があったんですね)
・Shizukuの認可がいちいち面倒…
taskerのADBでもできますぜ。
sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます