2018年4月21日土曜日

【Android】ユーザー補助設定が勝手にOFFになる原因

ユーザー補助って何?

Android OSに備わっている「ユーザー補助」設定とは、Googleが提供している機能であり、身体に不自由があるユーザーが不自由なくAndroidやアプリを利用できるための補助機能です。

例えば次のような補助機能をOSが用意しています。(一部の例)

  • 音声フィードバック(スクリーンリーダー)
  • 音声コマンド
  • 点字ディスプレイ
  • フォントサイズ、拡大操作
  • コントラストや色の調整
  • 字幕

上記のような補助機能を活用して、例えばとあるアプリの起動と終了に合わせて切り替えるとか、アプリがテキストを表示したら音声で読み上げる等のアプリを提供することが出来ます。

なお、これらの機能はGoogleにより、「身体に不自由があるユーザーのために利用されなければいけない」とされているので開発者の方々はご注意を。

ユーザー補助機能を利用するには?

Android OSの設定画面からユーザー補助対応されたアプリをONにする必要があります。

設定画面はOSバージョンや機種によって異なりますが、大抵は「設定」の直下に「ユーザー補助」があると思います。

ユーザー補助が勝手にオフになる?

Androidのユーザー補助設定について調べていると、「勝手にオフにされて困る」といった記事を見かける事がありました。

調査してみましたところ、次のようなケースが該当する様ですのでご参考まで。

  • アプリを更新したタイミングでオフになる
  • 電源(電池)管理機能でユーザー補助アプリがオフになる
  • アンチウイルスソフトがユーザー補助アプリをオフにする

それぞれ、少しずつ解説します。

原因1:アプリのアップデート

ユーザー補助機能を持つアプリのバージョンを更新(アップデート)すると、ユーザー補助設定が勝手にOFFにされてしまう機種がある様です。

これはアップデートのタイミングでそのアプリが自分でユーザー補助設定をOFFにするのではなく、OSの機能か、端末メーカーの独自仕様なのかによってOFFにされてしまっているようです。

アプリ更新時にOFFにされる現象がある端末については、今後もアプリ更新の度にユーザー補助がOFFにされてしまう事でしょう。

対策:根本的な解決にはなりませんが、もしそのアプリの動作に現状満足している場合、アプリの更新は行わない様にPlayストアで設定すると良いです。

原因2:電源(電池)管理機能

メーカーや機種によって異なりますが、この原因2の場合は概ね以下のいずれかが当てはまります。

  • スリープから復帰するとユーザー補助がOFFにされている
  • 省電力機能の発動時にユーザー補助機能がOFFにされる

前者の場合は、電源管理系のアプリもしくはOSのバッテリーマネージャー系の設定が「画面がオフになったらアプリ終了するよ」といった親切な機能を発動してくれてしまい、ユーザー補助がOFFにされることがあるようです。

こちらの記事(外部リンク)ご参照。

後者の場合は、OSの電池管理機能の中にある「省電力機能の対象外アプリ」でユーザー補助をOFFにされたくないアプリを選択すれば良いそうです。

対策:とりあえず上記のどちらかを確認する。設定の場所はOSや端末毎に異なるので、ご自身の端末の設定を調べてみてください。最近のOSだと設定画面内を検索もできるので、「バッテリー」や「電源」「電池」などで検索すると良いと思います。

原因3:ウイルス対策ソフト

これもウイルス対策アプリの仕様によって異なるので何とも言えませんが、「ユーザー補助」を有効にさせない設定をもつアンチウイルスアプリもあるようです。

対策:とりあえずウイルス対策ソフトの設定を見てみる!(それ対策か?)

勝手にOFFどころかそもそもONに出来ないんだけど?

上記のアンチウイルスアプリの設定のせいか、もしくは画面上にレイヤをかぶせて表示するアプリ(ブルーライト対策アプリとか)が起動していると、ユーザー補助設定がONにできないようです。

特に後者の方は、画面上に通常とは異なる情報を載せる事が出来てしまう状態になっているので、例えばアプリインストールとか、権限許可の切替などもAndroid OSが制限します。

ブルーライトフィルタが常駐しているよ!(そのアプリって本当にブルーライトフィルタだけの機能?大丈夫?)アプリのインストールボタンを偽造して画面上に表示しているかもしれないから、今の状態だとアプリはインストールさせてあげられないなぁ。

といったことをAndroid OSさんがやってくれているんですね。

思い当たるアプリをいったん終了してからやってみてください。

2018年4月19日木曜日

【Android】【アプリ開発者向け】ZTEの端末でのみ動作しない現象

この記事にたどり着いたAndroidアプリ開発者の皆様へ

当ブログをご覧いただきありがとうございます。

この記事は下記のような悩みをお持ちのAndroidアプリ開発者向けの記事になります。

  • 多くの端末では好評いただいているアプリの中、僅かに「動かない」「使えない」といったレビューをいただいてしまう
  • どの端末か確認すると、ZTEの端末であった

開発者の皆様の参考になれば幸いです。

また、情報お持ちでしたらコメントいただけたら嬉しいです。

なお、期待している方には大変申し訳ありませが、問題の根本原因追究や具体的な問題の発生方法などは(面倒なので)記載していません。その中に「ZTEでのみ問題が発生している」という事実がある事を共有し、「やっぱりそうなのか」と感じていただくことが目的です。ユーザーのために問題を解決したいところは皆共通の意識だと思いますが、残念ですが現時点では解決に至っておりません。それもあり、具体的な事は書いていません。

結論:ZTEはSQLiteまわりの動作が他の端末と異なる(事がある)

微妙な書き方でごめんなさい。そこまで深く調査は出来ていないので上記の様な書き方にしています。

実際にZTEの端末を購入してSQLiteに関する処理を行ったところ、ZTE以外の端末(17万以上)ではまったく問題がない処理が、ZTEスマホの3台でのみ正常に動作しませんでした。

なおかつ、試行によって動作が異なるというオマケ付きでした。確率?タイミング?

プログラマがそんな曖昧な発言して良いの?とバカにされそうですが、StackOverflowにも類似の問題が複数報告されており、解決に至っているものはありませんでした。

一例:Not getting SQLite tables on specific device brand ZTE-Z982 N9560

StackOverflowなんて素人の集まりだろ…と突っ込みがあると思いますが、私どもにはZTE端末にささげる調査工数をこれ以上捻出できなかったため、他の優秀なプログラマの皆様からの情報を是非ともいただきたくよろしくお願いします。

調査したそもそもの発端

私どもが公開している1つのアプリをご利用のユーザー様より、「バックアップファイルを読み込んでもデータが読み込めていない」とご連絡をいただきました。

お問い合わせの概要は以下でした。

  • 他の機種でバックアップファイルを作成した
  • 機種変更でZTE製のZ-01Kを購入し、バックアップファイルからのデータ読込を実施した
  • 読込処理は正常完了し、「データの読み込みに成功しました」の画面表示を確認した
  • しかし実際にデータは正しく読み込まれていなかった
  • 他の機種、および別途公開しているWindows版ソフトウェアでは、そのバックアップファイルで問題なくデータの読込ができている
  • Z-01Kでのみデータの読込は出来てない
  • 再掲するが、プログラム上の処理自体はエラーや例外(Exception)が無く正常完了している

このアプリは17万以上のユーザーにご利用いただいており、機種変更時のデータ移行に限っても100件以上のレビューでご好評いただいており、問題なく動作しているものと認識しています。

そんな中で上記のお問い合わせをいただきました。

しかも同じ機種Z-01Kをご利用の方からのべ2通のお問い合わせをいただきました。

2画面スマホZ-01Kの特殊仕様?

外観からして特殊な端末のため、個別仕様なのかと当初は考えていました。

ですが、Z-01K以外にもZTE Blade e02をご利用のユーザーからも同様のお問い合わせをいただきました。

Z-01Kは問い合わせを受けた時には9万円以上するものでしたたため、調査端末として購入するには高額過ぎて手が出せませんでしたが、Blade e02は1万円前後で購入できたため早速Amazonでポチりました。

「Blade e02」安い!

 

ZTE Blade e02で問題発生

バックアップファイルを読み込むことが出来ませんでした。

プログラマなら詳細まで書け!と怒られそうですが、なんせたった1行のシングルスレッド上の処理(SQLiteのupdate処理)が試行によって結果が異なる現象が発生しました。

いやいや、何か別の処理が悪さしてるんだろ?

皆そう思いますよね。私もそう思います。ですが、(確認できている事として)Z-01KとBlade e02では動作に問題があり、その時点での有効インストール数である、その他の端末17万については全く問題がないという状況でした。

対策は?

根本原因が分からない以上、ZTEの端末をご利用のユーザーには申し訳ないと感じつつ、だからと言ってご利用いただいた後に問題が発生することは避けられないため、SQLiteを扱うアプリではZTE端末を「インストール対象から除外」することといたしました。

ZTEの全ての端末が問題なのか、Z-01KとBlade e02だけなのかは分かりません。ただし、少なくとも上記StackOverflowの様に他のZTE端末でも「ZTEでのみ」という記載とともに問題がある事は判っています。

本件については継続して調査いたしますが、もし情報お持ちの方いらっしゃいましたらコメントもしくはメールにてご連絡いただけたら非常にありがたく存じます。

何卒なにとぞよろしくお願い申し上げます。