UfoSaCtrlTrip Ver3.00 U.F.O. SA A10サイクロンSA (+PLUS プラス) バッハスマート ROCKET+1D ランダムコントロールアプリ

U.F.O. MOBILEなる新商品が発売される一方U.F.O. SAの再販は一向にされず、いよいよこのアプリも終わりが見え始めて来たような気もする今日この頃ですが、そんなタイミングでのバージョンアップです。
表向きの機能追加や変更はそれほど大きいわけではないのですが内部的には丸々ゴロっと変わっているのでメジャーバージョンアップ扱いにしています。

主な機能追加として近接センサーを利用できるようにしたことと、画面オフするボタンを新設したことがメジャートピックです。
またボリュームボタン以外をロックするボタンは今まで画面のレイアウトそのままにボリュームだけがタップできるような形でしたが、これを全画面にボリュームボタンのみが大きく配置される形に改めました。

機能追加および変更点

軽くデモ動画を撮りましたので、よろしかったらご覧ください。
ここをクリックorタップするとYoutubeに遷移します。

1.近接センサー
近接センサーを動作開始/停止の切り替えボタン的に使用することができるようになりました。
近接センサーの無い機体では残念ながら使用することができません。
通話ができるスマホにはほぼ全ての機体に付いていると思いますが、タブレットではほとんど付いていないかと思います。

近接センサーはスマホで通話するときに画面を顔に近付けると画面表示が煩わしかったり、うっかり頬や耳が画面に触れて意図しない操作をしてしまったりしないように付けられているセンサーでして、通常は通話中にこのセンサーに何かしらの物体が近づくと画面表示が消えるように制御されていますが、これをこのアプリではスイッチ的な使い方ができるようにしたものです。

この機能は分かっている方が使用する分には便利な機能に成り得るものですが、理解の無いまま機能が有効になっていると『なんか分かんないけど勝手に動いたり止まったりするときがある』という不具合に思われる危険性が高いため、規定では機能オフになっています。
この機能を使用する際はメニューの『Switching』でスイッチ設定画面を開き、『近接センサーをON/OFF切替に使う』にチェックを付けてください。

UfoSaCtrlTrip300-003.png

近接センサーの反応の仕方には機種固有の癖とかもあると思いますので、この機能を使用したい方はご自分のスマホでどのように近接センサーが反応するか、このアプリを立ち上げて(U.F.O. SAには接続しなくても良いので)近接センサーの付近に手をかざしてみてください。
ボリューム0と0以外のどれかを行き来すると思います。ボリュームが切り替わるときが近接センサーが反応したときです。
なお、0以外というのはこのボリューム切り替えをして0にするときにその直前のボリュームの値を記憶して、その値に戻す、といった動きになりますので、使いたいボリュームにしてから近接センサーを使ってオン・オフすると捗ります。(^^ゞ

(なお、余談ですが、デモ動画で筆者は必死にスマホの上部右側に手をかざしていますが、実はこの動画に使用しているスマホの近接センサーは上部中央の通話スピーカーよりも左側にあります。馬鹿ですね〜筆者。そんなんでも反応するときは反応します。)

まっ暗闇でも恐らく反応します。多分赤外線かなんか出して反射をセンシングしてるんじゃないかな?

2.画面オフボタン新設
メイン画面右上のメニューの隣に画面表示(バックライト)をオフにできるボタンを配置しました。

UfoSaCtrlTrip300-001.png

実際にはロックまで行ってしまいます。
その後画面表示を再開するときにできるだけロック解除をしなくてもこのアプリの画面が表示されるようにプログラムは組んでいますが、ロックのセキュリティ次第ではロック解除の手間が掛かるかもしれません。
こちらも使う方には便利な機能になりますが、この機能に理解の無い方が『なんか知らんけど画面が勝手に消える』ということでアプリの不具合やスマホ本体の故障を疑うかもしれませんので、この機能はデフォルトでは機能しないようにしてあります。
この機能を使用したい場合はメニューからSwitchingの画面に移動していただいて機能『LCDOFFボタンを使用する』にチェックを付けてください。
(上記の近接センサーの設定と同じ画面です)
スマホのロック機能との兼ね合いで必ずしも全ての人にとって便利な機能とは限らないので、使わない方はメニューのSwitching画面でチェックを外してください。(初期状態では外れています)

またこの画面オフ(ロック)機能を有効にするために改めて権限の許可をしていただく必要があります。
このアプリの設定で使用するチェックを付けたのち、初めてボタンをタップしたときにその許可画面が表示されます。

UfoSaCtrlTrip300-004.png

『この端末管理アプリを有効にする』というところをタップしてください。
すると画面が元のアプリ画面に戻り、それ以降画面オフボタンが有効に機能するようになります。
AndroidOSのバージョンによって表示等若干異なるかもしれませんが、概ね流れは同じです。

そして、この機能を有効にしている場合はこのアプリをアンインストールするときに今の権限を無効化する作業が必要になります。
アンインストール時に通知やトーストなどで端末管理の権限を外さないとアンインストールできません的なお知らせが出ます。

UfoSaCtrlTrip300-005.png

通知の場合はその通知から、トースト等ではそこから端末管理権限の設定画面へと遷移できます。

UfoSaCtrlTrip300-006.png

この画面でチェックを外して、このアプリを端末管理アプリから外してあげてください。
そして再びアンインストールの作業を行えば、今度はスムーズにアンインストールされると思います。
こちらもAndroidOSのバージョンによって表示のされ方等若干の差異がありますが流れは同じです。

時間が経って忘れた頃にアンインストールしようとしたときにビックリされるかもしれませんが、ここの部分を頭の片隅に蜘蛛の巣這わせて置いておいていただけると幸いです。

また、画面を消灯する方はできますが、画面を点灯させる方向は現状実装できていません。仮に実装できたとしてもかなりアクロバティックな実装になると思いますので現時点ではそこまでムリしてもメリット無いなと思って実装していません。
画面を点灯させる際は、本体に元から備わっている機能で行うか、下記にも出てくるキーボードやジョイパッドを予め接続しておいてそれらを押すと点灯させられらますので、上手いことお好みの操作方法を組み合わせていただければと思います。

3.ボリュームOnlyモード
従来のボリュームボタン以外の操作をロックする機能をメイン画面の一番右下のボタンに配置して用意していましたが、こちらの機能を、ボリュームボタン以外を非表示にして、ボリュームボタンだけを全画面にでっかく配置するように変更しました。
大雑把な画面タッチでもボリュームをコントロールできます。(このアプリも初期の頃はこんな感じでデカいボタンでリモコン風にしていたので先祖返りした気分です。)
まあ、普段画面を消して使っている筆者にはほとんど不要な機能なのですが、損する人もいない改修かと思います。

UfoSaCtrlTrip300-002.png

元の普通の画面に戻したいときは画面左上の『<UfoSaCtrlTrip』の辺り、特に『<』の辺りをタップするか、Androidの戻るボタン『◁』をタップしてください。

4.キーボード等による操作受付の拡大
以前にもちょっことだけ書いたことがあったのですが、過去にメディアボタン対応として音楽再生関連のボタンでいろいろとこのアプリのコントロールができるようにしたときに、同時にジョイパッドやキーボードにも反応するようにある程度プログラムを仕込んでおりました。
今回は数字キーの『0』『1』『2』『3』を押したときにそれぞれの数値に合致するボリュームになるように反応を増やしております。

筆者の勘違いにより、ジョイパッドやキーボードは画面を消灯してしまうと反応しないと思い込んでしまっていたのですが、デモ動画をご覧になった方はお分かりになると思いますが、どうやら画面が点灯して反応してくれるようです。

ですので、以前に仕込んでいたカーソルキー『←』『↑』『→』『↓』や『Home』『End』『PgUp』『PgDn』、『Space』『Enter』『BackSpace』『Delete』などのキーやジョイパッドの十字パッド、ボタン等でも同じように画面が点灯したうえで何かしらそれっぽく動くと思います。
概ねボリュームの変更として動き、『Space』『Enter』辺りは動作開始/停止の切り替え、『BackSpace』『Delete』はバックボタンとして機能するので各種設定等の画面から戻ってきたりアプリを終了したりといった感じに機能すると思います。

画面が消灯したままにはできないのが玉に瑕ですが、これはAndroidOSの縛りですので、現状これ以上の改善は不可能です。残念。
また、キーボードやジョイパッドなど接続する際はこのアプリを起動する前に接続しておいていただく方が無難です。
アプリ起動中にこれらを接続すると最悪このアプリが異常終了してしまいます。
これはAndroidOS側が勝手にBLE接続やサービスの整理をしてしまっておいて当アプリの再走を強制してくるので当アプリのサービスが見つからずに続行不可能になってしまうというもので、現時点では筆者はこの現象の最適な回避策を知りません。
一応、言い訳のメッセージは出すようにしましたけど。(^^ゞ(AndroidOSのせいだよ〜んってね)
接続が切れてしまった場合は再接続を試していただいて、再接続できない/アプリが異常終了した/アプリ画面は残っているが正常に機能しないといった症状が出た場合はアプリ再起動をお願いいたします。

5.Android12(S)対応
一応、Android12でBluetoothの権限回りが変更になったのを取り込んではみました。
ただ、Android12で最適化してしまうと古いバージョンのAndroidでの使い勝手が悪化してしまうため、いろいろと試してみた結果、今回もTargetはAPI22(Android5.1 Lollipop)に留めています。
どうしても位置情報の権限を付けておかないとU.F.O. SA等と接続できない機種があったので、今回も位置情報の権限を必要としています。
位置情報の権限が無くても接続ができる機種では権限を与えなくても構いません。
また、当然のことながらこのアプリでは位置情報など全く見ておりません。
一時期のAndroidがペアリングをしないBluetooth接続に対して位置情報の権限を必須としてしまった仕様の影響によるものです。
また、これへの対応も機種によってバラバラで、権限が無くても接続できる機種、権限さえあれば位置情報をオフにしていても接続できる機種、位置情報をオンにしないと接続できない機種など、うちにある機種だけでも反応がバラバラで処置に困ります、ホント。
度々言っていますが、接続さえできてしまえば位置情報をオフにしても大丈夫です。ずっとオンにしておく必要はありません。
なんでこんな仕様にしたんだかね?(悪用するアプリが蔓延ったせいなんだろうけども)

なお、Android13で今度はBluetooth通信回りで変更が入るのですが、そちらの取り込みはまだしておりません。
毎度お馴染みですがAndroid13が動く機体を筆者が持っていないからです。
そもそもAndroid12だってカスタムROMを焼いてようやく検証しているもので、純正ROMで筆者が持っている最新はAndroid10です。
……でも、大半の方はこのアプリ使うときはお古のサブ機じゃろ?
筆者が常用しているのもAndroid6.0だしの。

6.Kotlin化
ユーザーの方には関係無い話ですが開発言語をJavaからKotlinに移行しました。
JetpackComposeとやらも導入してみたかったのですが、これを導入するにはAndroid4.4以下を切り捨てなければならないので今回は導入を諦めました。
(うちのAndroid4.4は液晶バックライトの一部が点灯しなくなってしまっていよいよヤバいです……)
筆者が気付いていないバグがあったらゴメンナサイ。

7.Deprecated対応
こちらも普段ならわざわざ言わないことなのですが、Androidは新機能が導入される一方、切り捨てられていく機能もあります。
その切り捨てられる機能を使用していたところを修正するわけですが、今回、アプリの設定等の保存方法を変更しています。
(どのボタンがどういう状態になっていたか等を記憶しておく部分)
従来のバージョンのUfoSaCtrlTripとは互換性が無くなっていますので、画面の状況やスイッチ設定などは前バージョンを引き継げません。今バージョンを使用する際は一度全ての設定を再確認して必要な設定は再度していただくようお願いいたします。
また、毎度のことですが、制御設定(Settings)の長い文字列を自分用にカスタマイズしていた方は一旦どこか別のファイルかなにかにコピー退避しておいて、こちらのバージョンにまた書き戻してください。

※以前の説明はこちら

毎度ゴメンナサイ。m(__)m
いい加減たまには使用方法とかまとめないとなあ、とはちょくちょく思うのですが、こうして変更点書くだけで毎回結構な量になってしまってとてもまとめなんかした日にゃあ薄い本が分厚くなるのでその他既存の機能についてはこちら
UfoSaCtrlTrip Ver2.20 U.F.O. SA A10サイクロンSA (+PLUS プラス) バッハスマート ROCKET+1D ランダムコントロールアプリ
UfoSaCtrlTrip Ver2.10 U.F.O. SA A10サイクロンSA (+PLUS プラス) バッハスマート ROCKET+1D ランダムコントロールアプリ
UfoSaCtrlTrip Ver2.00
UfoSaCtrlTrip Ver1.0
の過去記事をご覧ください。

筆者のへんてこなコダワリにより、200KB弱の小さいアプリながらも機能がアホみたいにてんこ盛りなので、もっと使い込んでみたいと思われた奇特なお方(ほめことばよん♥)は過去記事の説明もご参照ください。
きっと文量に圧倒されて見る気を失うことでしょう。わはは。

より詳細な成り行きとか愚痴とか

興味の無い方はすっ飛ばしてください。(^^ゞ

今まで、このUfoSaCtrlTripやUfoTwCtrlでは、画面をオフにした状態でもコントロールを可能とするために様々なコントロール方法を導入してきました。

本体にあるボリュームボタンでももちろんボリューム調節できますし、メディアボタン対応が最たる例でして、音楽再生等で使用される『再生/停止ボタン』や『ボリュームボタン』『先送り/巻き戻しボタン』などでこのアプリのボリュームとかパターンとかを変更できるようにしてきました。

このメディアボタン。キーボードとかBluetoothコントローラーに付いているメディアボタンだけでなく3.5mmジャックに付いているボタンにも対応していまして、例えば100均などで良く見る『リモコンシャッター』なんかはAndroidから見るとボリュームアップボタンという扱いになります。

本体のボタンをなるべく使わないで運用したい場合にこれらの別付けボタンが非常に便利なのですが、残念なことに『リモコンシャッター』以外あまり使い勝手の良いデバイスが無いようにも思えます。

3.5mmジャックでメディア操作する機能って、調べてみると結構便利そうなのですが、実際に製品化されているもの、となると、まずイヤホンに付属するものであるということが前提になってしまうため、とにかくボタンが小さくてこのアプリのコントロールにはちょっと使いづらいという点が挙げられます。
というか、イヤホンそのものがBluetoothに取って代わられようとしている時代の流れで、そもそも3.5mmジャックの無いスマホとか、有線イヤホンでリモコンボタン付きがほとんど販売されなくなってしまった、という事情もあります。

筆者は暫く『リモコンシャッター』を使っていましたが、『リモコンシャッター』を『動作/一時停止』用として使用していたため、そのように設定すると本体のボリュームボタンも『動作/一時停止』になってしまうという弱点がありました。
これはアプリからは3.5mmジャックからの入力と本体のボリュームボタンとが区別できないためなのですが、これが区別できれば便利だったのですが、ちょっと残念なところでした。

で、その後『フック付きのイヤホンマイク』を使用しまして、こちらのボタンは最初から音楽用としても『再生/停止』なのでそのまま『動作/一時停止』用として使用でき、本体のボリュームボタンの動作とも別けることが可能でした。

ただまあ、やっぱボタンが小さいんですよ。
慣れで解決するっちゃあするのですが、ワイヤーがだら〜っと伸びるのもちょっとだけスマートじゃない。

かと言ってBluetoothキーボードとか繋ぐのもアレだし、USBのキーボードとかジョイスティックとか(繋げばある程度それっぽいボタンに反応するようにはなっているので興味がある方は試してみてください)も大仰だし、そもそも消費電力食うよね、と。

Bluetoothイヤホンとかのリモコンも総じて小さいし、リモコンまでBluetoothだとやっぱり反応がね、ちょっと遅延が気になることもあるんです。

んで、なんか良い方法無いかな〜? って考えて、暫くは画面をオフにしても画面タッチが機能する状態を作れないか調べたり奮闘していて、その一環でボリュームボタンだけを全画面に大きく配置する、という機能追加を行いました。
しかし、結局、画面オフ状態でタッチは機能せず。
できているように見えるアプリは筆者が調べた限りですと、画面照度を低くして真っ黒の表示にしているだけ、でした。

画面照度なんて筆者はこのアプリ使うときは最低照度にしているのでこれ以上下げようが無いし、黒い画面表示にする意味なんて有機ELだったら多少は意味あるのかもしれないけれど、バックライト液晶しか持ってない筆者にはまるで無意味。
画面点けっぱなしとまるで変わらないので、それだったら普通に画面表示していた方が良いや、ってなります。

画面オフにしても機能するモノ〜〜〜〜〜〜、ってうーうー唸って考えて、で、どっかで閃いたのがこのセンサー類でした。
メジャーなモノですと、スマホを持ち上げたら画面が点くとかそういう機能があるスマホとかありますよね?
それって加速度センサーを使っていて、それは画面がオフでも機能させることができるんです。

ただ、加速度センサーだと、例えばこのアプリでなんか操作して画面をオフにして、ぽんっとちょっとその辺に放り投げたなんていうシチュエーションなんかでも作動したりしてしまうので、あまり使い勝手良さそうには思えませんでした。
そこで白羽の矢が立ったのが近接センサーでした。

近接センサーは通話が出来るスマホならばほぼ全ての製品に付いています。
通話するときに画面が顔が近づきますよね。
そのときに画面が点きっぱなしだと眩しかったり煩わしかったり、あるいは頬や耳であらぬところをタップして誤操作に繋がってしまうかもしれません。
なので、通話時にこの近接センサーが発動すると画面が消灯するようになっています。

これをこのアプリのコントロールボタンとして利用できないか? となりました。
1つのボタンにしか使えないのでボリュームのアップ/ダウンとかの制御には向きません。
『動作/一時停止』用に使うのが最適と判断しました。

これが使えたら、3.5mmジャックに挿していたリモコンボタンが不要になり、本体だけで極力本体のボタンを消耗せずにコントロールできるようになるため結構便利な機能追加です。
近接センサーの反応にはちょっと癖があるため、慣れは必要でしょうが、やはり本体から出っ張る鬱陶しいケーブルが無くなったというのが大きく、筆者はもうこちらの近接センサーでコントロールするようになりました。
ま、意図せずお布団被って反応してしまうとか、2回反応してしまって元の状態のままなんてこともあったりするのですが、でもケーブル無い方が筆者的には嬉しいので近接センサーを使い続けてます。

消費電力とかどうなんだろ? ってちょっと気にはなっていたのですが、まあ筆者の普段使っているスマホがバッテリーの残量表示が適当な古い中華端末でバッテリーも適度に劣化しているので判断が難しいのですが、今のところ感覚的にはイヤホンリモコンボタンを使用していたときと同等もしくはむしろ若干消費電力が減ったかもしれない、という程度になりました。
あーKotlin化を同時にしているのでそっちのせいという可能性も無いわけではないのですが、センサーを使っているからといって気になるほど消費電力が増えるわけではないのは確実ですので安心してご使用ください。(機種によるかもしれませんが)

話は変わりましてアプリの設定値の保持方法を変更した件ですが、従来はPreferenceというAPIクラスを使用していたのですがこれがDeprecatedになってしまいまして、暫く知らんぷりして放っておいたのですが、今回重い腰を上げました。
詳しく見てはいないのですが、どうも大幅に機能強化して従来機能をDeprecatedにしたっぽいのですが、下位互換性のためにライブラリを読み込むとアプリのサイズが一気に700KBくらい増大して筆者は面食らいました。
だって、200KBに満たないこのアプリが急に900KB超えてんだもん。
設定値の保存なんてこのアプリでは大したデータを保存しているわけではないので、そんなもののためにこんな容量食うのはヤダ、と思いまして、Preferenceを使わずにベタのファイルの読み書きを自前で実装するという、むしろ先祖返りというかバージョンダウンみたいな手法でDeprecatedを回避しました。

最新化は結構だけど、なんか腑に落ちないのよね。
切り捨て強制のせいで古いバージョンのAndroidに下位互換用の余計なライブラリを大量に読み込ませるようになるっていうなんか理不尽な感じ。
古いバージョンそのものを全部丸々捨てたいというのが本音なんだろうけど、うーん、なんか納得行かないので筆者はなるべくこういう無駄なライブラリを読み込まないで済むようにプログラムを組んでいます。
全くモダンでない古臭い画面表示もその一環なんですよ。
変にライブラリ追加しないで済むようにデザインしてるんです。
このアプリはU.F.O. SAなどが便利に制御できることが至上命題なので、おしゃれな見た目なんてイランノデスヨ!
って筆者は思ってます。
というか基本的に筆者はだいたいこういう思想なので大抵のアプリが超絶地味で古臭い見た目になります。
(メインPCなんかXubuntuで未だに部分的にビットマップフォント使ってたりするのでWindowsで言うとXP時代のノリを続けている筆者です。でも、ホント無駄に見た目にリソース費やすの嫌いなんだぁ。Androidも真っ先に開発者オブション行ってアニメーション全切りします。Windowもアニメーション関連が切れるだけ切ります。無駄リソース食うのも嫌だけど、アニメーションに無駄な時間取られるのがもっと嫌。いちいち待たされるのが本当嫌。誰か共感してくれ〜〜〜〜)

ダウンロードファイル

勝手な再配布はしないでください。
また、このファイルのみへの直接リンクを貼ることもご遠慮ください。
特に、うちのサイトは弱小なので、検索で上位に表示されるサイトに勝手にコピーされると、盗まれたのとほぼ同じ状況に陥ります。
何かしらの問題が発覚して、こちらのサイトでファイルを差し替えても、それが皆さんの元には反映されなくなることにも繋がります。

諸事情によりアプリの無料配布を終了致しました。
今後は活動を支援してくださる方とのみ細細と共有していければと思います。

今後のUfoCtrlアプリ配布ページはこちらです。
UfoCtrl Ver1.00 (UfoCtrl開発活動支援プラン)

設定ファイルを何かしらイジったことがある場合は単純に上書きインストールするだけですと今回変更した設定は反映されないかもしれません。
その場合は設定画面で右上のメニューを開き『RecoveryBasicData』をタップしてください。
すると今回の規定の設定になります。(ということはそれまでの設定が上書きされてしまうので事前に退避するなりしておいてくださいね。

アップデートインストール後に動作がおかしくなった場合は再起動してみてください。
それでもおかしい場合はキャッシはその設定が消えてしまいますので、操作をする前に設定の退避(テキストファイルなどに移して保存)をしてください。

2022-12-10

この記事のタグ

U.F.O.

TW

SA

アプリ

制御

自作