2010-06-10(木) [長年日記]
■ iPhoneユーザが目の色を変えるAndroidの機能紹介(2) - 賢い「戻るボタン」
前回紹介したインテント、「マルチタスクOSならでは」的な書き方をしたけど実は嘘で、別にシングルタスクOSだって実装できる*1。だからまぁ、Appleはあえてアプリケーション間連携機能を削っているという見方は正しいだろうね。iOS4でその垣根は少し低くなるようだけど、それでもiPhoneのアプリ間に立ちはだかる塀は高い。
そんなアプリ間の行き来についても、Androidはとてもよくできている。インテントと並んで評価の高い機能が「戻るボタン」なので、今回はこれを取り上げる。「戻るボタン」は多くのAndroid端末に付いているハードウェアキーで、これがアプリケーションを跨いだ遷移を実に上手にさばいてくれるのだ。
ちょっと脱線するけど、iPhoneアプリが内蔵するブラウザで、「戻る」操作を間違えたことがないだろうか。おれはよくあった。ブラウザには「ページ遷移」を制御する「戻るボタン」が必要だが、アプリに組み込まれるとさらに「前の状態」に「戻るボタン」が必要になるため、画面内にふたつの「戻るボタン」が発生してしまうのだ(アプリによって表記をいろいろと工夫しているが、機能的に近いので迷ったり間違えたりすることに変わりはない)。
ちょっと自分のiPhoneに入っているいくつかのアプリの内蔵ブラウザを並べてみた:
![[スクリーンショット]iPhone用アプリの内蔵ブラウザ4つ [スクリーンショット]iPhone用アプリの内蔵ブラウザ4つ](https://userimages.tdiary.net/sho/20100610_0.jpg)
こんど「iPhoneアプリは厳格な審査のもとにUIが統一されているから使い易いんだ」的なことを言うヤツがいたら首を締めてやる!
……閑話休題。
こんな内蔵ブラウザの乱用が起こるのも、標準ブラウザ(Safari)をアプリ内から立ち上げると、元のアプリに簡単に戻る手段がiPhoneにはないためだ。いったんホームに戻って前に使っていたアプリを探して(また探しもの!)、起動すると前の状態を忘れていてガックリなんて場面もよくある。
Androidの「戻るボタン」は、上記の問題を両方ともスマートに解決している(下の写真はHTC Desire。左矢印マークが「戻るボタン」)。
![[写真]Android端末HTC Desireのハードウェアキー。 [写真]Android端末HTC Desireのハードウェアキー。](https://userimages.tdiary.net/sho/20100610_1.jpg)
まず、ハードウェアキーなので、間違えるということがない。これはとても重要なことで、アプリケーションは個別に同じ「戻る」という機能のキーを狭い画面に押し込めることなく実装できるから、画面が広く使えるだけでなく、操作が統一できる。多くのアプリで共通の操作になる機能には、独立したキーを与えるべきなのだ*2。
さらに、アプリケーション間を遷移すると、その遷移状態も「戻って」くれる。例として、こんなシチュエーションを考えたよ:
1. たださんは趣味を同じくする知人から耳寄りな情報をメールで受け取ったようです。さっそく、メールに書かれていたURLをタップ。
2. Androidではブラウザを内蔵したアプリはめったにない。当然、デフォルトのブラウザ*3が立ち上がってWebページが表示される。おっと、知人が教えてくれたのはTwitterのURLかと思ったら、公式サイトのURLだったようです。右メニュー内にイカロスくんのTwitterアカウントを見つけてタップ。
3. twitter.comのURLを検知して、(ブラウザではなく)Twitter専用クライアントtwiccaが立ち上がる*4。さっそくフォロー。
さて、ここまで3つのアプリを渡り歩いてきたわけだが、このあと先ほどのメールに返事が書きたい。iPhoneではホームボタンを押して、アプリ一覧からメールアプリを「探して」立ち上げるか、iOS4ではホームボタンを二度押しして起動中のアプリを「探して」選ぶというところ。iPhoneはほんとうにこの「探す」作業が多いね。
Androidでは、「戻るボタンを2回押すだけ」。
しかも、途中に挟まったブラウザのページは、メールに戻る段階で閉じられるので、次回ブラウザを起動したときにも残ることはない。ユーザの「操作の歴史」をアプリケーション境界を超えてたどることで、メール/ブラウザ/Twitterクライアントがまさに渾然一体となった動作を実現してくれる。
この他にも、戻るボタンはあらゆる場面で最適な「戻る」動作をしてくれる。ポップアップを閉じるときも、通知バーを引き上げるときも、キーボードを一時的に隠したいときにも「戻るボタン」をクリックするだけで期待通りの動作をする。Androidの「戻るボタン」は、スマートフォンを名乗るからにはまさにこうあって欲しいという「スマートさ」を持っているのだ。
*1 年配の人はCOMMAND.COM(MS-DOS)の作業ファイルを経由するパイプ処理を想像するとよろしい。
*2 追記: ツッコミにもあるが、残念なことにハードウェアキーとして実装していない端末もある。
*3 画面は標準ブラウザではなくAndroidマーケットからダウンロードしたDolphin Browser HD。
*4 twiccaはAndroidの特色のショーケースと言っていいくらいに多彩な機能を実装していて実に楽しいクライアントなので、Androidを入手したら試してみるべきアプリの筆頭。
2010-06-08(火) [長年日記]
■ iPhoneユーザが目の色を変えるAndroidの機能紹介(1) - インテント
あ、なんか釣りっぽいタイトルになってしまった(笑)。
いやね、行く先々で「たださん、Androidどうですか」って聞かれるんだけど、けっこうみんな、Androidのこと知らないんだよ。GoogleがAppleに対抗して作ったiPhoneOSの真似っこにすぎなくて、たいして違わないと思い込んでる(白状すると、おれもそう思っていた)。で、iPhoneとの違いを重点的に説明してあげると、「わー、いいなー」っていう反応がかなり返ってくるんだな*1。
というわけで、(だんだん個別に説明するのが面倒になってきたので)ウケのいい機能をいくつかピックアップしてみようと思う。まずはマルチタスクOSの面目躍如、アプリケーション間連携機能「インテント」について。
iPhoneで撮った写真をメールで送るという場面を考えてみる。iPhoneOSは「ユーザの自由度を制限する代わりに適切なデフォルトを与える」という思想で作られているから、カメラで撮ったままの解像度の高い写真をメールに添付すると、有無を言わさず800x600にリサイズする*2。このサイズはなかなか絶妙で悪くないデフォルトだけど、もっと小さい/大きいサイズで送りたい場面はいくらでもあるので、使っているとちょっとずつ不満が蓄積するんだよね。
もちろん画像をリサイズできるアプリはたくさん出ているから、それを使った上でMMSを使って送信すればいい。しかしその手順ときたら:
- カメラアプリで写真を撮って
- カメラアプリを終了して
- リサイズアプリを探して立ち上げて
- いま撮った写真を探して選び
- リサイズして(保存するのを忘れずに!)
- リサイズアプリを終了して
- 画像ビューアを探して立ち上げて
- いま保存したリサイズ済み写真を探して選び(隣に並んだまったく同じサムネイルを持つリサイズ前の写真と間違えないように注意!)
- メール(MMS)で送る
……うわぁ、気が遠くなるね! 特に「探す」作業があまりに多くて苦痛。これならデフォルトで我慢するわ。
Androidだとこうなる。ちなみにおれが使っている画像リサイズアプリはImage Shrink。あとは標準アプリだけを使って同じことをしてみよう。
1. まずカメラで写真を撮るところまでは同じ。右のスクリーンショットはそのあとカメラアプリ内蔵のビューアに移ったところ。画面下部にいくつかアイコンが並んでいて、左から2番目に「○から矢印が2本出ているアイコン」が見えるだろう。これがインテントの送り先(アクティビティ)を選ぶアイコンで、Androidアプリの多くについている。
2. インテントアイコンを選ぶと出てくるのがこのリスト。これは、画像を受け取ることができるアプリの一覧を示している。そのままメールに添付もできるけど、今回は画像を縮小したいので「Image Shrink」を選ぼう。
3. するとその場でImage Shrinkが起動して、サイズを選ぶ画面に。今回は相手の回線事情に配慮して、少し小さめの640x480にしよう。いつも同じサイズに変更する場合は何も聞かずに実行する設定にもできる。
4. Image Shrinkはリサイズを終えるとすぐさまインテント選択画面を表示する。「今リサイズした写真をどこに送る?」と聞いているわけだ。ここではGmailを選ぼう。
5. すぐにGmailのメール作成画面が現れる。写真が添付状態になっているのがわかるだろう。あとはアドレスと本文を入れて送るだけ。
ここまで、写真を「探す(選ぶ)」場面が1回しかなかったことに注目。また、数あるアプリの中から必要なものを探し出すのに、インテント機能によって絞り込まれた一部の中から選ぶだけだったことから、iPhoneに比べて「ものを探す」労力がはるかに少ないのがわかる。
インテントはこのように、アプリが「自分はこの手のデータを受け取れる」という情報をあらかじめ登録しておくことで、OSが送り手とのマッチングをはかってくれる機能だ。画像だけでなくテキストでもいいし、URLでもいい。例えば、メールに貼られたTwitterのURLをクリックするとブラウザでなく使い慣れたTwitterクライアントが起動することもある。
この機能がギークにウケるのは、Unixシェルのパイプ処理のようなツールボックス・アプローチを想起させるからだろう。iPhoneOSで先のようなことを簡単にさせようと思ったら、カメラと画像編集機能とメール送信機能が合体した巨大アプリを作るしかないのだけど(キッチンシンク・アプローチ)、Androidではゆるやかに連携した単機能アプリがシームレスに仕事をしてくれる(ツールボックス・アプローチ)。
リソースが潤沢なPCではiPhoneアプリのような作り方でもいいが、スマートフォンのようにリソースの限られた機械では、どちらが良いアーキテクチャかは言うまでもない。Android 2.2ではこのインテントを、ネットワーク越しにも送れるようになるそうで、これはもうwktkせざるをえない。AndroidはけっしてiPhoneOSの模倣だけしているわけではないのだ。
*1 もちろんおれの知り合いなんてたいていギークなので、そういう方面にウケそうなプレゼンをするからである。iPhoneでゲームばっかりしている向きに差別化ポイントを説明する自信はない。
*2 おまけに800x600より小さな写真は拡大して送ってくれるという親切"機能"付き。MMSでは1024x768で、拡大"機能"はなし。
◆ himo [>iOS4からはドキュメントサポートが追加されていて、アプリ側が扱えるファイルタイプを宣言しておくことで、そのファイ..]
◆ himo [>これ間違いでした。 としましたが、間違いではありませんでした。 iPadのOS3.2の「Document Sup..]
◆ ただただし [himoさん、spamフィルタがキツすぎるみたいで、なんどもお手数おかけしました。 少なくともファイルに関しては他..]
◆ 通りすがり [インテントについて良くわかりましたw Android側はやはりオープン的な志向がiOSより強い側面があって、PC的..]
◆ and慶周 [Appleはできるけどやらないだけだみたいな信仰はどこから来るのが不思議ですね iOSよりAndroidの優れる点は..]
◆ qwer [>信仰はどこから来るのが不思議ですね おそらくジョブズのカリスマ性からだと思います。 Apple製品は何一つ持って..]
2010-06-07(月) [長年日記]
■ Android SDKでHTC Desireのスクリーンショットを撮る
WWDC基調講演を待ってるのも暇なので(←うそ。日付がかわってすぐに寝た)、Androidのスクリーンショットを撮れるようにした。端末単体でスクリーンショットが撮れないのは、Android最大の失策だと思うね、ホント。
開発をするならEclipseとかも必要なんだろうけど、今回はスクリーンショットを撮るだけなので、Javaの実行環境だけが必要。ま、普通はOOo入れるついでにJREがどこかに入ってるだろう(そうかぁ?)。
続いてAndroid SDKから最新のSDKをダウンロードしてzipを展開。いかにもな感じの「SDK Setup.exe」が出てくるけど、別にセットアップしなくても使えるのでここはスルー*1。toolsの下にあるデバッグ環境「ddms.bat」が目的のファイルである。
そのまま実行しても一瞬ウィンドウが出て終わるだけかも知れないが、それはたぶんJavaの実行環境が見つかってない。ddms.batをメモ帳あたりで開いて、「set java_exe=」を見つけ、そこにjava.exeのパスを書けばいいようだ。ウチのWindows7 64bit版の場合:
set java_exe=C:\Program Files (x86)\Java\jre6\bin\java.exe
で、実行するとDelvik Debug Monitorというウィンドウが立ち上がる*2ので、DesireをUSBでPCに接続。モードは「HTC Sync」。同期を始めようとするけど、Backボタンで中止させる。さっきのDelvik Debug Monitorには、接続されたデバイスが認識されているはず。
あとはCtrl+Sを押せばキャプチャウィンドウが開くので、Saveするなりなんなり好きなように。PNGフォーマットでスクリーンショットが撮れる。いやはや、これはハードル高いなぁ。
◆ ただただし [いろいろ考慮しなくてはならないのはわかりますが、まさにatsushienoさんが書かれているとおり「実現できないとは..]
◆ miyagawa [まさしくスクリーンショットまわりで HTC Sense の脆弱性が発見されてますね。 http://www.toms..]
◆ ただただし [bookmark_thumb1はブラウザのブックマークのためのスクリーンショットが入っているディレクトリなので、なん..]
◆ miyagawa [ファクトリーリセットしても消えないところに保存されているので、人にあげたり中古で売ったりしたら全部(かどうかしりませ..]
◆ miyagawa [それとも、なんでSense UIの問題かわからないってことですかね? " this feature is relat..]
◆ ただただし [ああ、そういうことですか。Desireしか知らないから、あのブックマークがHTCの独自拡張とは知りませんでした。 で..]
Before...
◆ pie [ハードウェアボタンを取れば、部品代やら品質テスト工数やら直接の原価を削減できる上に、故障する可能性も除去できて製品の..]
◆ robotti_500_1 [重箱の隅で恐縮ですが、iOS4のタスクスイッチは、ホームボタン長押しじゃなくて、ホームボタン2度押しですよ。]
◆ ただただし [>pie コストダウンや信頼性向上の圧力があるのはよくわかります。一方でハードウェアボタンはユーザビリティを高めるわ..]
◆ yoosee [故あって Incredible を使い始めましたが、確かに「戻る」ボタンはよく出来てます。最初慣れるまでは画面上を「..]
◆ Hideppio [私はX10miniを使っているので、いっそう、画面の外にあるハードキーは重要ですw あの3つ(もしくはそれ以上)のボ..]
◆ スマホ使いずらい [Desireもiphoneもタッチパネル入力は入力ミスが多くなるからキーはハードウェアがモアベターだす。でなければ..]