ウィジェット」タグアーカイブ

【Androidアプリ開発ドキュメンタリー】 虚空より突如蘇る、不死鳥プロセス ~後編~

こんにちは、開発の小野知之です。

先月の続き、後編です。
今回は余力不足で挿し絵が無いです。後で追加するかもしれません。

ところでこの話、ウィジェット作成時に発生した現象ではありますが、結論から言えば Activity を使った普通のアプリでも同様に発生する可能性があります。Android アプリを開発する方は、知っておくと何か役に立つことがあるかもしれません。

【前編のあらすじ】

終了したはずのアプリのプロセスが突如復活するという怪現象が発生。

一度は原因が判明し、対策も万全と思われたが、平穏な日々はそう長くは続かなかった。

消滅したはずのプロセスが、いったいどこから、どうやって蘇ったのか。そして、復活を阻止する手段はあるのか…?

続きを読む

カテゴリー: Android | タグ: , , , | 2020/06/16 更新

【Androidアプリ開発ドキュメンタリー】 虚空より突如蘇る、不死鳥プロセス ~前編~

こんにちは、開発の小野知之です。

今回は、私が実際にAndroidアプリを開発していて遭遇した体験を、前後編の2回にわたってお送りします。アプリ開発される方はもちろん、Androidの内部動作について興味ある方にも、何かの参考になるかもしれません。

なお、挿し絵や説明図は全部、私が コミPo! で作りました。

続きを読む

カテゴリー: Android | タグ: , , | 2020/06/16 更新

【Android トラブル解決】ウィジェットをインストールしたのに、一覧に表示されない?

こんにちは、開発の小野知之です。

Androidアプリを開発・公開している方は、ユーザーさんから原因不明の不具合報告をもらって頭を抱えたことはありませんでしょうか。

今回は、そんなAndroidアプリの中でも、「ウィジェット」でよく報告されるトラブルと、その原因と解決方法についてのお話です。

一般の、Android スマホ・タブレットのユーザーさんも、知っておくときっと役に立つ知識だと思いますので、是非「解決方法 その1」だけでも読んでみてください。

【追記 (2016/03/22)】Android 4.2くらいから後の端末では、「ウィジェット一覧が回転できない」ようになっている端末が多くなってきました。このような端末では、ウィジェットが一覧に表示されない場合の対策は、解決方法その1のような「端末を回転する」ではなく、「ウィジェットの再インストール」または「インストール後に端末を再起動」しかないようです。
また、最近の端末では、ウィジェットをSDカードへインストールできる端末は無いようです。なので、解決方法その2のケースはほぼ無さそうです。

トラブル発生!!

ウィジェットをGoogle Playからインストールしたユーザーさんから、こんな報告を受けたことはありませんか?

『ウィジェット一覧にアイコンが出てこないんですけど。』

中には、自分自身でこのような経験をした方もいると思います。ウィジェットをホーム画面に配置しようとして、ウィジェット一覧を開いても、そこには目的のウィジェットのアイコンが見つからないのです。

きっと、この現象に遭遇したほとんどの方は『ちくしょう、このアプリ、バグってやがる!』などと思うのではないでしょうか。

しかし、アプリ開発者やユーザーサポートの方々は、『いや、そんなバグは無いと思うんだけど…』と、頭を抱えてしまうことと思います。

そうなんです。
この現象は、ほとんどの場合、ウィジェットのバグではないのです。

解決方法 その1: とりあえず、端末を回転してもらう

「なに言ってるんだ?」って思われるかもしれませんが、とにかく試してもらってください。

端末を回転して画面の縦横が変わると、ウィジェット一覧のアイコンが並び替えられます。そうすると、さっきまで無かったアイコンが一覧に出てくるのです。今回の質問のようなトラブルの場合、ほとんどの場合はたったこれだけで解決してしまいます。

  • 本体の設定で「回転ロック」をON(または「自動回転」をOFF)にしている場合は、一時的に設定を変更してから試してください。
  • 正常にインストールされていれば、ウィジェット一覧にアイコンが表示されていなくても、システム設定の「アプリケーション管理」の画面には表示されています。

原因は、『Android OSが、ウィジェット一覧を更新しそこねることがある』ためです。

Android OSは通常、インストールしたウィジェットのアイコンをすぐにウィジェット一覧に追加します。ところが、まれに一覧が更新されず、以前の一覧のままになることがあるのです。当然ですがこのときは、インストールしたばかりのウィジェットのアイコンは表示されません。

私が試した範囲では Android 2.3.3 と 4.0.3 で複数回ずつ、発生を確認しています。もちろん、端末を回転したらアイコンが出てきました。他の方の話を聞くと、どうやら Android OSのバージョンはあまり関係なく発生するようです。

この現象、案外遭遇するわりには、原因と解決方法についてほとんど知られていないようです。つまりそれだけ「アプリのバグ」として片づけられているんですね(涙)。

『ウィジェットが一覧に追加されなかったら、とりあえず回転』。

みなさんの周囲の Android を使っている方に、是非ともどんどん広めてください。困っているユーザーさんがいたら、教えてあげてください。

※なお、端末を再起動しても改善します。また、アプリを再インストールすることでも改善することがありますが、いずれにしろ、回転するのが一番簡単です。

★ 開発者向け情報 その1 ★

せっかくなので、Androidアプリ開発者向けのお話を補足。

今回紹介したこの「ウィジェット一覧に追加されない現象」ですが、なんと、開発用の Android エミュレータでも発生します。エミュレータがいかにしっかり作られているかがよく解り、ちょっぴり感動します。

もちろん、端末(エミュレータ画面)を回転させれば、ちゃんと出て来ます。

ちなみにエミュレータの画面回転は、[Ctrl]+[F11] または [Ctrl]+[F12] です。

 

解決方法 その2: SDカードにインストールしていないか、確認してみる

Android OSの仕様により、どんなウィジェットでも、SDカードにインストールすると使用できません。ウィジェットは必ず本体メモリーにインストールしてください。もしも、手動でSDカードにインストールや移動をしてしまった場合は、本体メモリーに移動させてみてください。

通常は、ウィジェットは自動的に本体メモリーにインストールされるので、この問題はほとんど発生しません。

ところが、一部の機種では設定次第でSDカードへインストールできてしまう場合があります。また、ファイル管理アプリなどを使ってSDカードへ移動することもできます。こうしたウィジェットは使用できなくなり、ウィジェット一覧にもアイコンが表示されません。端末を回転してもウィジェットのアイコンが追加されない場合は、このケースにあてはまらないか確認してみてください。

  • 「SDカード」は「microSD」と表記している機種もあります。また、「本体メモリー」は「内部メモリー」「内部ストレージ」などと表記している機種もあります。
  • 使用できなくても、システム設定の「アプリケーション管理」の画面には表示されています。

ではなぜ、Android OSがこのような仕様になっているかというと、それは『SDカードは取り外せるから』です。

ウィジェットのような、常駐して動き続けるアプリがSDカードにあると、SDカードを外した時に困ったことになります。どんな挙動をするかわかりません。

これはSDカードを抜かなければ良いというものでもありません。Android OSの起動時には、SDカードがOSに認識されるまでの間は一時的に「SDカードが無い(抜かれたのと同じ)」状態になります。また、USBケーブルでPCと接続した場合も、SDカードをOSからマウント解除(切り離し)しますので、同様のことが発生します。

ついでにもう一つ覚えておいてほしいのは、ウィジェットに限らず、「常駐して動き続けるアプリはすべて」、SDカードにインストールすると動作に問題が生じる可能性があるということです。

本体メモリーの空き容量が減ってきた場合でも、アプリをSDカードへ移動するときは注意が必要です。もしも、SDカードへ移したアプリがおかしな挙動をするときは、そのアプリは本体メモリーへ戻して使ってください。

★ 開発者向け情報 その2 ★

ここでも Androidアプリ開発者向けのお話を一つ紹介します。

Androidアプリを開発するときに、Android 2.2 以降では、そのアプリのインストール先メモリーを指定しておくことができます。 具体的には、AndroidManifest.xml の manifest タグ内に、下記のような定義を追加します。

android:installLocation=”internalOnly”

この右側部分の文字列には、下記の3つのいずれかを指定します。

internalOnly 常に本体メモリーへインストールします。
インストール後でもSDカードへは移動できません。
preferExternal なるべくSDカードへインストールしますが、空き容量が少ないかったりSDカードが外されている場合などは本体メモリーへインストールします。
インストール後に相互のメモリーへ移動できます。
auto なるべく本体メモリーへインストールしますが、 空き容量が少ない場合はSDカードへインストールします。
インストール後に相互のメモリーへ移動できます。

ウィジェットなどの常駐して動き続けるアプリでは “internalOnly” を指定します。

installLocation の指定が無かった場合は、通常はこの “internalOnly” を指定したものとして扱われますが、「解決方法 その2」で紹介したようにSDカードへインストールできてしまう場合もあるので、必ず明示的に指定したほうが良いです。

ゲームなどのような、常駐しないアプリでファイルサイズが大きいものは、”preferExternal” を指定しておくと親切で良いと思います。

なお、Android 2.1 以前ではこの指定は無視され、常に本体メモリーにインストールされます。Android 2.1 もサポートしたい場合は注意してください。

 

解決方法 その3: ウィジェットの使い方を知っているか、確認してみる

Google Playに公開されているウィジェットには、こんな評価コメントが付いているのをよく見かけます。

『インストールしたのに画面に出ません』

私は最初、これは「解決方法 その1、その2」のいずれかのことだと思っていましたが、そうではなかったんです。

これらのコメントを付けたみなさんは、ウィジェットがどういうものかを、そもそも知らないのです。インストールしたらホーム画面にポンと現れるものと思っているのです。

Android のスマホのユーザー数は劇的に増え続けていますから、必然的にこういったユーザーさんの数もどんどん増えているわけですね。開発者の視点だけでは、なかなか気付きにくいことだと思います。

みなさんの周囲にAndroidのスマホを買った方がいたら、ウィジェットの使い方をさりげなく教えてあげてください。

特に、ウィジェットを開発・公開する側の方は、「ウィジェットはこう使うんですよ」ということをユーザーさんにしっかり教えてあげなくてはならないと思います。たとえば、Google Playで公開するなら、説明文にウィジェットの基本的な使い方まで解説しておくと良いのではないでしょうか。

最後に

Androidのウィジェットを使用する場合によく発生するトラブルと、その原因・解決方法について、紹介しました。これらを、中でも特に「回転してみる」を、是非とも Androidユーザーさんの間にどんどん広めていってください。

そして…無実の「★1つ」が、少しでもGoogle Playから減りますように…。

あ、そうそう。これらの3つのどれにもあてはまらない場合は、やっぱりアプリ側のバグの可能性が高いと思いますよ(汗)。開発者の方は、AndroidManifest.xml のタイプミスなどを疑ってみてください。

おまけ その1

ちょうどこの原稿を書いている最中に、海外の方から「ユーのウィジェットをインストールしたけど、ウィジェット一覧に出て来ないんだけどっ!」(意訳) という内容のメールが来ました。アプリ管理画面には出るのにウィジェット一覧には出ないらしいです。まさに「原因と解決方法 その1」の件そのものですね。

で、なによりも驚いたのは、この方の Android がつい先日発表されたばかりの「4.1」だったということです。そうか、4.1 でもまだ改善されていないのかこれ…。

あ、ところでこのユーザーさん、私が「回転してプリーズ」ってメールを出した直後に、「ユーにメール送った直後に、リブートしたら出てきたよ! また他のウィジェットでなったらトライしてみるよ! サンクス!」(意訳) という返事がありました。回転して改善するというところまでは確認できなかったのが残念です(まぁ間違いないでしょうけれども)。

おまけ その2

Google Playで、個人的に「TOMOYUKI ONO」名義でいくつかウィジェットを公開しています。気が向いたら検索してみてください(コソコソ…)。

カテゴリー: Android | タグ: , , | 2020/06/16 更新