2009年5月アーカイブ

本日(2009年5月19日)、NTTドコモ(docomo)から正式に、Android携帯電話(スマートフォン)の発表がありました。
docomo PRO series HT-03A(HTC Magicベース)、発売時期は、2009年6月~7月です。

 

【NTTドコモの公式サイト】

 

【HTCの公式サイト】l

 

【その他サイトのリンクまとめ】

洋書の紹介です。 

オライリー(O'REILLY)から「Android Application Development」という洋書が発売されるそうです。
amazonでの発売日は、2009/5/29と書かれています。

書籍の内容を調べてみると、以下のような内容であり、
これまでに国内で発売されているAndroid本を持っていれば、あらたに得られる情報は少なそうです。
※サンプルソースコードも2008/11~2009/2のものだったし

  • Get a complete introduction to the Android programming environment, architecture, and tools
  • Build a modular application, beginning with a core module that serves to launch modules added in subsequent chapters
  • Learn the concepts and architecture of a specific feature set, including views, maps, location-based services, persistent data storage, 2D and 3D graphics, media services, telephony services, and messaging
  • Use ready-to-run example code that implements each feature
  • Delve into advanced topics, such as security, custom views, performance analysis, and internationalization
      • しかしながら、この本は、待望のオライリー本ということで、発売前から多くの予約が入っており、
        洋書のAndroid本としては、既に発売されていたAndroid本(洋書)をごぼう抜きして一番人気のようです(2009/05/18独自調査)。
        さすが、オライリーブランド。。。

        私は、Android本をたくさん持っており、もーいいかな・・・という感じなんですが、
        オライリーファンとしては見逃せない。
        ということで、日本Androidの会の方々が監訳してくれないかと期待しています(その際には、お手伝いさせていただきたいなー)。

        ちなみにオライリー本は、ブックカバーに一貫性があるため、たくさん並べてみると、とてもおしゃれです。

        ※私は、インテリアとして飾るためにオライリー本を買っているという噂もあります

        ※ところで明日(2009/5/19)は、いよいよXデーですね、ADP1の時のように、どんな発表内容であっても買いますよ
         もはやコレクターに近いな・・・

         

        詳細は、こちら「Android Application Development 」から。

        Android1.5のバージョンノートや各種ニュース記事で、Androi1.5から音声認識に対応したことを知っていたのですが、
        具体的なソースコードを紹介した記事がなかったため、

        音声認識って言われても、「難しそう...」「どうせ、生(RAW)データの波形で飛んでくるんじゃないの?」

        と、勝手に解釈していたのですが、実際にソースコードを書いて実行してみると、

        インテントを発行しただけで、音声認識の画面が表示できるし、
        試しに、ADP1に向かって「voice」と発音してみると、音声認識結果を文字列で取得できている(※3)。。。

         

            「こいつ認識するぞ!」

            「基本処理は、フレームワークがやってくれるのか」

         

        その衝撃たるもの、アムロ・レイが初めてガンダムのコックピットに座って、マニュアル(※1)を片手に、
        「こいつ動くぞ」「基本操作はコンピュータがやってくれるのか」(※2)と発した衝撃に似ている。

          ※1:ここでのマニュアルとは、Androidの公式リファレンス
          (http://developer.android.com/reference/android/speech/RecognizerIntent.html

          ※2:ガンダムでは、2本のレバー(+α)の操作で、複雑であろうロボットが動作するし、
          Androidにおいても、数行の操作で、複雑であろう音声認識が動作する

          ※3:本当のところは、「voice」って発音しても、最初の数回は、「boy」って認識されちゃいました。。。
           しかしながら、音声認識の性能が悪いのでなく、私の発音の性能が悪いせいだと言い聞かせました

        詳細のソースコードのまとめ記事は、「音声認識(RecognizerIntent)を使用するには - 逆引きAndroid入門」にアップしました。

        本日から3日間(2009年5月13日~15日)、
        東京ビッグサイトで開催されている「第12回 組込みシステム開発技術展(ESEC2009)」における
        Android関連の出展社・出展製品一覧。

        早くも同イベントの速報記事がアップされているので、
        こちら「Android ニュースリンク集 - adakoda」にアップしていくことにします。
        ※おそらく2009/5/13以降1週間以内の日付になると思います。

        Android Marketから届いた 「[#437795881] A Message from Android Market」という件名のメールによると、
        有料アプリを配布できる地域に、フランス、イタリア、スペイン、オランダが追加されたそうです。

        これにより、現在、有料アプリを配布できる地域は、以下のように8ヵ国になりました。

        • United States(アメリカ合衆国)
        • United Kingdom(イギリス)
        • Germany(ドイツ)
        • Austria(オーストリア)
        • France(フランス)
        • Italy(イタリア)
        • Spain(スペイン)
        • Netherlands(オランダ)
        ※2009年5月13日現在
        ※ただし、USとUK在住の開発者に限る

        日本Androidの会2009年5月(11日)のイベント、
        株式会社タイトー山田俊一様の発表資料「Android Game Programing Tips」の中で興味深い内容がありました。

        アーケード・コンシューマは30fps or 60fps
        携帯アプリは10~30fps
        傍目に見てカクカクが目立つのは8fps 以下
        TVアニメは24fpsで製作
         ※同資料の3ページ目から引用

        タッチパネル
        ・重い!激重!
         ※同資料の13ページ目から引用

        fpsというのは、Frame Per Secondのことで、1秒間にどれだけのループ(フレーム描画)処理できているかという指標で、
        例えば、10fpsだと、1秒間に10フレーム描画できているということで、1フレームあたり100ミリ秒で処理できていることになります。

        では、いったいAndroidの実機では、どんなもんだろう?ということで、私の方でも実際に試してみました。

        試してみた環境は、
        「Android Dev Phone1(1.5Firmware)」
        +
        「Android 1.5 SDKサンプルのApiDemos - Graphics - OpenGL ES - Sprite Text」
        です。

        このサンプルは、OpenGL ESのサンプルであり、実行してみると、
        下図のように、三角形のテクスチャとテキストが、フレーム毎に回転描画され、
        加えて、1フレームあたりの処理時間もミリ秒(ms/f)で表示されます。

        端末を操作しない状態では、瞬間的に17ms/fが表示されることもありましたが、
        平均すると、下図キャプチャのように、23ms/f前後でした(このサンプルでの話)。

        162-SpriteText.png

        ms/fの算出方法としては、
        最初のフレーム描画後のシステム時間と、12フレーム描画した後のシステム時間との差分を、12で割ることで算出しています。

        この12というのは、適当なサンプル間隔であり、
        値が小さいと、結果にばらつきが生じますし、値が大きいほど、結果は正確になりますが、収集に時間がかるため、フィードバックが遅くなる、
        ということで、12は、その中間の「ほど良い値」といったところでしょうか。

        また、このサンプルでは、ms/fという記事冒頭のfpsとは単位が異なるので、
        ソースコードを修正して、fps表示してみました。

        ms/f から fps(f/s) への変換は単純で、y[f/s] = 1000[ms/s] / x[ms/f] で算出でき、このサンプルだと、だいたい43fps前後でした。

        fps.png

         
        参考までに、修正したソースコードの箇所は、ApiDemos\src\com\example\android\apis\graphics\spritetext\SpriteTextRenderer.java
        の、drawMsPF()でms/fを計算している箇所と、onSurfaceCreated()で"ms/f"単位表示している箇所だけです。

        ちなみに、このサンプルで画面をタッチ操作してみると、システムがタッチ処理に応答してしまうためか、描画が遅くなり、
        冒頭資料の描画表現でいうところの「カクカク」、「タッチパネル激重」につながります。

        ※この時、このサンプルのms/f(修正したfps)表示では、ms/fが小さい値(fpsは大きい値)というように、
        逆にパフォーマンスが良い値となってしまうので、このあたりは修正の余地がありそうです。。。

        最後になりますが、セミナーの予習として、以下のまとめ記事をアップしていましたので、参考になれば幸いです。
        →「Androidゲームプログラミングの情報源は - 逆引きAndroid入門

        Android1.5から新たにスライディングドローワー(SlidingDrawer)ウィジットが追加されました!

        が、

        ドキュメント(Dev Guide/Reference)からキャプチャを見つけられないだけでなく、
        SDKのサンプルソースコードにもありませんでした(2009/5/9現在)。。。

        きっとアレだろうと想像しながら、実際にソースコードを書いてみたのですが、例外が発生して上手くいかず。。。

        真面目にドキュメントを見てみると、以下のような記載が。。。

        <SlidingDrawer
             android:id="@+id/drawer"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:handle="@+id/handle"
             android:content="@+id/content">
             <ImageView
                 android:id="@id/handle"
                 android:layout_width="88dip"
                 android:layout_height="44dip" />
             <GridView
                 android:id="@id/content"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent" />
         </SlidingDrawer>
        

        で、上記を張り付けて実行させてみると、例外は発生しなくなったが、
        見た目は、真っ暗のままで、何も表示されていないように見える。。。

        Google検索してみると、「Android Developers」で似たような症状で困っているという旨の投稿がありましたが、
        まとまった解決方法を見つけられず。。。

        ということで、自力で まとめる しかないと覚悟を決め、長時間格闘したあげく、使えるようになりました(まとめ記事は、以下のリンク先参照)。

        スライディングドローワー(SlidingDrawer)を使用するには - 逆引きAndroid入門

        160-1.png

        ※本文中のアレ(SlidingDrawerで正解)

        昨日、「[#434741094] A Message from Android Market」という件名のメールが、Android Marketから届いていました。
        内容を要約すると、以下のような感じです。

        • 無料アプリの配布先選択チェックボックスに、フランス、イタリア、スペイン、カナダ、ポルトガル、スイスを追加した(※1)
        • しかしながら、上記の国々のうち、現在、デバイスが存在するのは、フランス、イタリア、スペインだけであり、
          残りの国々も、近いうちにそうなるだろう
        • 開発者は、配布先の国を1ヵ国だけ選択してもよいし、
          配布可能なすべての国々を意味する「All Current and Future Locations」を選択してもよい

        • 数週間のちに、フランス、イタリア、スペイン、オランダのユーザーも有料アプリを入手できるだろう
        • また、ドイツ、オーストリア、オランダ、フランス、スペインの開発者が有料アプリを配布できるようにも努力している

        • あなたのアプリのタイトルや説明を、異なる言語で販売しやすくするために、ローカル言語のサポートを追加した
        • 現在、英語、ドイツ語、フランス語、イタリア語、スペイン語、オランダ語、チェック語、ポーランド語が対応済である(※2)

        • Android Marketに配布するアプリには、manifestファイルに、minimum SDKの記述が必須となった
        • 現在、Android 1.5のデバイスもあるが、多くは、1.1のため、まずは、1.1向けに配布することを推奨する

        また、上記※1と※2に該当する画面を、実際にAndroid Marketにログインし、キャプチャしておきましたので、貼っておきます。

        ※1
        publishing_option.png

        ※2
        listing_details.png

        Android Marketには、FlashLightという名前(または、それに似た名前)の懐中電灯アプリが、たくさん公開されています。

         

        FlashLightとは

        画面全体を白色などの塗りつぶしで表示し、携帯のバックライトを懐中電灯として使うためのアプリケーション。

        以前、まいむぞう先生の「照明スイッチからベッドまでのお供に「Flashlight」 | Androidあぷぷ -Androidのオススメアプリ情報を毎日お届け-
        という記事でも紹介されていました。

        flashlight.png

         

        FlashLight仕様(機能)

        実際に実機にインストールして仕様を調べてみたところ、以下のような機能がありました。

        • フルスクリーンで単一色(一般的には、白)の塗りつぶしを表示する
        • 任意の色に変更する
        • タッチされている間だけ色を変更する
        • 自動的に複数の色を変更させることにより、点滅表示する
        • (画面の)明るさを変更する

         

        FlashLightを自作する

        なるほど、こんな簡単な仕様なら、自分でも作れそうだということで、作成してみたところ、結構ハマリました。。。

         

        まず、最初にハマったのが、フルスクリーン表示

        フルスクリーン表示しているアプリってあったかと考え、
        そういえば、デフォルトでインストールされている「Camera」アプリがそうだったと思い出し、

        packages\apps\Camera\src\com\android\camera\ViewImage.java
        [platform/packages/apps/Camera.git] / src / com / android / camera / ViewImage.java

        に、それらしきコードがあることを発見し、解決。

        ※解決方法は、「フルスクリーン(Full Screen)/全画面表示をするには - 逆引きAndroid入門」へ掲載しました
        ※トラックバックをいただいていたサイト内の「完全にフルスクリーンにしたい - Androidで開発してみたい - android-dev」でも発見

         

        そして次にハマったのが、色選択(カラーピッカー)

        今更ながら、Android SDKには、標準のウィジットがないことに気付きました。。。
        こちらも、どっかで見たはず、と記憶をたどり、
        Android SDKに同梱されている「API Demos」サンプルアプリの「Graphics」 > 「FingerPaint」で使用されている
        ColorPickerDialogクラスがあったことを思い出しました。ソースコードは、こちら、

        platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\graphic\ColorPickerDialog.java

        しかしながら、このクラスは、com.example.android.apis.graphicsパッケージにあったため、今回は、実装を見送りました。。。

         

        そして最後の難関が、画面の明るさの変更。

        こちらも、どっかで見たはず、と記憶をたどり、
        デフォルトでインストールされている「Settings」アプリの「Sound & Display」 > 「Brightness」で実現されていたことに気づき、

        packages\apps\Settings\src\com\android\settings\BrightnessPreference.java
        [platform/packages/apps/Settings.git] / src / com / android / settings / BrightnessPreference.java

        に、それらしきコードがあることを発見。
        しかしながら、その実装方法は、非公開APIを使用していたため、断念し、
        再度、gitからrepoで落としてきたAndroidのソースコードを、brightnessで全検索し、

        development\apps\Development\src\com\android\development\PointerLocation.java
        [platform/development.git] / apps / Development / src / com / android / development / PointerLocation.java

        に、もっと良い方法があることを発見。

        ※解決方法は、「画面の明るさ(Screen brightness)を変更するには - 逆引きAndroid入門」(長文)に掲載しました
         (こんなとこにも、Android SDK 1.5 の変更があるとは。。。)

         

        そして最後のオチ
        色々苦労した結果、原稿を書きあげ、仕上げにGoogle検索で、原稿をチェックしていたところ、
        以下にズバリの記事/コードがありました。。。

        以前のセンサー記事「[Android] Redesigned Sensor Manager APIs(Android1.5) | The type SensorListener is deprecated - adakoda」にも書いたSensorEventListener.onSensorChanged()に渡されるSensorEvent.values[0~2]の値は、順にAzimuth(方位角)/Pitch(傾斜)/Roll(回転)の値であり、ヘルプには、以下のように書かれています。

        values[0]: Azimuth, rotation around the Z axis (0<=azimuth<360). 0 = North, 90 = East, 180 = South, 270 = West
        values[1]: Pitch, rotation around X axis (-180<=pitch<=180), with positive values when the z-axis moves toward the y-axis.
        values[2]: Roll, rotation around Y axis (-90<=roll<=90), with positive values when the z-axis moves toward the x-axis.

        が、わかりにくいですし、説明もしづらい。。。
        と思っていたら、わかりやすい説明を見つけました。

        http://www.novoda.com/blog/wp-content/uploads/2009/05/sensoreventcheatsheet_v1.pdf
        ※実機で確認済です
        <<前のページへ 123

        2010年9月

              1 2 3 4
        5 6 7 8 9 10 11
        12 13 14 15 16 17 18
        19 20 21 22 23 24 25
        26 27 28 29 30    

        自作フリーソフトウェア