2022年8月20日土曜日

Androidプログラミングはままならない

ALLDOCUBEというメーカーの iPlay40 Proという中華なAndroidタブレットを使っているのだが、8GB RAM/256GB ROMという値段の割にメモリーをたっぷりと載せた良いタブレットなのだがWi-Fi周りが非常に怪しい。具体的に言うと新しくWEBページを移動したりする時にデータが通らなくなったり、切断状態になったりする。他の端末では問題ないしWiFiをいったんオフにしてからオンすると復活するので端末側が悪いんだろうなと思っている。

そこでふと思いつきネットワークの疎通を監視して滞ったらWiFiのリセットを行うアプリを作れば良いんじゃないかと思い立った。
まともなAndroidアプリの開発経験は無いがPINGを打ってWIFIをリセットするぐらいならそれほど難しくないので数時間で動作確認するぐらいの所まではきた。
ちょっとPINGを打つのにINTERNETのパーミッションが必要なのに気が付かなくてまごついたが困ったのはそれぐらいだった。

ところが動作確認してみるとWiFiのステータスは正確に取れているが肝心のON/OFFが切り替わらない、何か間違っているのかとAPIリファレンスなどを確認しても良くわからない。検索していると驚愕の事実が分かった。以下のような制限によりWifiManager.setWifiEnabled()では切り替えられないようにAndroidの方が仕様変更されたということらしい。


https://developer.android.com/about/versions/10/privacy/changes?hl=ja#enable-disable-wifi

Android 10 以降をターゲットとするアプリは、Wi-Fi を有効または無効にすることはできません。WifiManager.setWifiEnabled() メソッドからは常に false が返されます。

Wi-Fi の有効 / 無効を切り替えるようにユーザーに促す必要がある場合は、設定パネルを使用します。


ようするにアプリからAPIによるコントロールはできないようになり、設定パネルって機能によりその名の通りシステムが用意したWiFi設定のWindowを表示してユーザーに切り替えてもらえということらしい。
掲示板で同じネタで困っている人の話で最新のPIXELのアップデートでは動作するように戻されたと書かれていたので、試しに最新のAPIのエミュレータで試してみたが切り替えることはできなかった。まぁエミュレータで動いても意味がないが。

WiFiの設定で従量制/定額制の設定を自動ではなく定額に設定すると切れる頻度が下がったような気が若干するのでそれでだましだまし行くしかないかなと思っている。


0 件のコメント:

コメントを投稿