SUGARSPOT

Androidアプリ、WEBサービス開発の SUGARSPOT  |Androidブログ「Androidのことなんだけど」もやってます

2011年8月31日水曜日

[Android]縦向きカメラアプリを作るのが思ったより大変だった

つい先日リリースしたアプリ「恐怖のおるすばんスナップカメラ」は、端末を縦向きに使うカメラアプリです
撮影した写真は、ちょっとイタズラ要素の入ったポラロイド風の写真になります

このアプリを作る際に、簡単に出来ると思っていたカメラを縦向きで使う事が、思ってたよりも大変だったので、作る際の(あまり役に立たないかもしれない)コツを書いておきます

まず、Androidのカメラって機種にもよりますが横向きで使う事を標準としています

これが標準










これを、縦にするとなんとなくOKにみえるけど
















保存すると、当然こうなります








横向きに保存されちゃう訳です。これは機種によっては異なるかもしれませんし、横向きで保存しておきながら、ギャラリーで見せるときには回転して正しい向きで表示する物もあります

「なんだ。じゃぁ、いいか」・・・と、
ただ画面いっぱいに撮影するカメラなら良さそうなのですが、
今回つくりたいアプリが正方形の写真が撮影できるものにしたかったので、これでは不味い


(作りたいアプリのイメージ)














まず、見た目を作るのに"何をしたか"というと、表示する部品は全て横向きで用意しました
こんな感じ















部品となる画像とかを横向きで用意すれば、縦で使った時に正しく表示されます
注意する点として画面が回転してしまうと思ったような表示にはならないので、向きは固定してしまいます

でも、ここで問題

横向きのアプリを、むりやり縦向きのアプリのように見せて使ってもらうだけなので、Android OSとしては、このアプリを横向きのアプリとして認識しています
なので、メニューとか、HOMEボタン長押しで表示される画面が横向きに表示されてしまいます


メニューは、こんな感じになってしまう














これは回避する方法がないので、解決方法としては「メニューは標準の物を使わない!」という事になる
具体的な方法としては、「画面にはじめからメニュー用のボタンを用意しておく」とか、「端末のメニューキーが押されたイベントを横取りして、自分の表示したいメニューを作って表示しちゃう」という事になります

今回のアプリでは、ABOUTという説明だけを表示したかったので、画面の中にABOUTを表示するボタンを設置しました


これで見た目はOKなのですが、写真を撮影すると画面が横に保存されてしまうので、保存されるまえに画像を回転する処理が必要になります
また、今回のアプリは正方形に写真を作りたかったので、正方形に切り取る処理を入れたりも必要です
そんな色々な処理や、写真の合成とか色々と大変な所があったのですが、詳しい作り方などは割愛します

もし聞きたい場合はどこかでお会いした際にでも直接聞いてください
(直接聞いても役に立つ情報が得られるかは保障しませんー)


以上。
簡単でしたが、縦向きのカメラアプリを作る際の(あまり役に立たないかもしれない)コツ。を紹介しました

2011年8月24日水曜日

ひろしまジン大学「こんなアプリがあったら”いいね”!」のお話

先週末の土曜日(2011/08/21)にひろしまジン大学の主催で行われた「こんなアプリがあったらい”いいね!”」に先生として参加させて頂きました

この授業は45(キャラントサンク)&bis”あわ”で行われている「docomo SMARTPHONE × 45(キャラントサンク)」EAT IT! Hiroshimaの一環で行われている授業で、スマートフォン授業の第3回となります

授業の流れとしては、こんな感じです
  1. Androidアプリってなに?の講義
  2. 各グループでのテーマ決め
  3. グループ毎でアプリのアイディア出し
  4. 考えたアプリアイディアの発表!
まず最初に私が20分ほど、アプリについての話しをしました
(当日のスライドはこちらからダウンロードできます。ちなみに、このスライドはOpenOfficeのプレゼンテーションで作成してPDFに変換した物です)
 内容的には、すごく表面的な所だけですが、この後アプリのアイディアを考えて貰う際の参考となれば!という観点で話しをさせて貰っています

次に、
■各グループでのテーマ決め
(グループは4グループで、1グループ4-5人)
何もない所からアイディアを出すのは難しいだろうというで、次のようなお題を提示

「いつものXXXXを楽しくするアプリ」

各グループに与えられた時間は20分。
(これを読んでいる人、ここで少し考えてみてください!)
ここで少しブレイク
この時15:30。おやつの時間です。
そうすると、なんと45(キャラントサンク)からデザートとドリンクが!!(すみません写真がぜんぜんないです。。。)

デザートをモグモグと食べながらテーマを考え、具体的に「こんなアプリいいよね!」というアプリの中身まで話しが発展していて、少しハラハラしてました
なんでハラハラしていたかというのは、この後で。
■テーマ発表

各チームで代表を決めて貰って、代表が各グループに渡されているタブレット(Optimus PAD)に手書きで決めたテーマを書いて発表して貰いました

この時、発表されたテーマが、これです。
チームA:「いつもの"コミュニケーション"を楽しくするアプリ」
チームB:「いつもの""を楽しくするアプリ」
チームC:「いつもの"めざめ"を楽しくするアプリ」
チームD:「いつもの"おでかけ"を楽しくするアプリ」 

■悲劇は突然オトズレル
ここで、突然のシャッフルタイム!!

各チームの考えたテーマを横に3つ移動して貰い(参加者の方に、理由を説明せずに好きな数字を1-3の中で選んで頂き3つ移動となりました)
最終的に決まったテーマがこれです 
チームA:「いつもの""を楽しくするアプリ」
チームB:「いつもの"めざめ"を楽しくするアプリ」
チームC:「いつもの"おでかけ"を楽しくするアプリ」
チームD:「いつもの"コミュニケーション"を楽しくするアプリ」

※シャッフルをしたのは、決して嫌がらせではなくて、他のグループが考えたテーマというのは世の中にあるニーズと捉えて、そのニーズにあわせたアプリを考えて貰いたかった為です。そうする事で、より違った発想のアプリアイディアが出る事を期待してみました!

■悲劇はまだオワラナイ

せっかくスマートフォン向けのアプリを考えるので、スマートフォンらしい機能を入れて貰うため、突然の
ルーレットタイム!!

ここでは、タブレット(OptimusPAD)にいれたルーレットアプリを使って、各グループにスマートフォンらしい制限を加えていきます
ルーレットには「GPS」「カメラ」「センサー」の3種類が各2個づつ配置されています
各グループの代表にルーレットをまわして貰って、決まったのがこれ
チームA:「いつもの""を楽しくするアプリ」& センサー
チームB:「いつもの"めざめ"を楽しくするアプリ」& センサー
チームC:「いつもの"おでかけ"を楽しくするアプリ」& カメラ
チームD:「いつもの"コミュニケーション"を楽しくするアプリ」& センサー
なんと、1グループがカメラで残りの3グループはセンサーとなってしまいました

■ツキナイ想像力

テーマが決まり、ここから60分で各グループでアプリのアイディアを考えて貰います
私は、これといってする事がないので、各グループを回って出てくるアイディアの発想をより柔軟にして貰う(余計な?)アドバイスをしたり、質問に対する回答をしていました

それにしても、色々な人が集まっているだけあって個性的なアイディアが沢山でてきますね。
普段、スマートフォンを使い慣れている人は、その知識の中からアイディアを出そうとして現実的なアイディアが多いのですが、あまりスマートフォンを使っていない人からは面白いアイディアが出やすい傾向にあると感じました
実現性や時間を考えると、どこまでもアイディアを膨らますのは危険なので、グループの中に適度にスマートフォン利用者がいると、非常に良いバランスでアイディアが出ていて、見てて非常に楽しかったです

残り時間が30分となった所で、この後のプレゼンについて説明
のこり15分の所で、プレゼンに向けての準備を初めてもらい
いよいよプレゼン

■プレゼンは発表ではなく、訴え?

各グループで話しあってもらったアプリの内容の発表です
発表順番は、ルーレットで決めました
(以下の概要は、私が聞いて感じた内容を書いているので、参加者の方がプレゼンした内容を正確に記載している物ではありません。参加者の方は、修正が必要な時は言ってくださいね!)

まず、最初はチームD。

チームD:(コミュニーケーション|センサー)
タイトル「はじめまして から はじめて」
概要:
相性判断や、デート中の雰囲気を感知して音楽やサポートをしてくれるアプリ
会話に困った時の手助けもしてくれる 
(タイトルにある”はじめて”については、ここで触れるのはさけておきます。大人的判断で)

チームA:(朝|センサー)
タイトル「シゴトスイッチ」
概要:
朝、利用者の睡眠具合を判定して仕事のスイッチを入れてくれます
眠りの浅い時には、やる気のでる音楽を!
眠りが十分な時は、やる気のでる1日のテーマを与えてくれるシゴトスイッチ君

チームC:(おでかけ|カメラ)
タイトル「思い出からリアルRPG」
概要:
街をあるきながら、カメラで写真を撮影して、写真の位置情報もGPSで記録
この撮影情報を使ってリアルRPGで遊んでしまおう!というアプリ
撮影した写真は、RPGの中の登場人物やアイテムなどの要素となる
嫌いな上司を的にしたり、壊したいものを壊したりもできる
そして、撮影した位置情報によって出てくるキャラクターは変わるので
色々な場所で、思い出を振り返りながらRPGが楽しめる

チームB:(めざめ|センサー)

タイトル「神からの指令」
概要:
アプリとしては、目覚まし時計を想像して貰うと分かり易いが、
この目覚まし時計は”神”なのです
朝、目覚ましのベルがなり、それを停止させるには神から提示さる指令をクリアしなければベルを停止させる事ができない
時に神は、”スクワットを10回しろ”という指令をだし、スクワットを正しくやっていいるかは携帯電話のセンサーをみて判断しているし
時に神は、”Ustream配信”を自動で開始する。すぐに起きて停止しなければ、しらない間にあなたの寝顔が全世界に配信されてしまうだろう
(この概要は、私の言葉で書いているので、実際のプレゼンはグループのメンバーが利用シーンを面白く写真にとって、スライドショーで見せるといった、とても楽しいプレゼンでした。文章では説明しにくいので、勝手な概要文を書かせてもらいました)

■ソウヒョウ(と、いうか感想)

最後に、 私の方から各グループのアイディアに対する感想を言わせて頂きましたが、ここでは省略させてもらいます


このような感じで行われた今回のひろしまジン大学の授業
非常に楽しかったです
先生という立場で参加させて貰いましたが、次は生徒として色々な授業に参加したいですね!

これを読まれている方も、ぜひひろしまジン大学に生徒登録して、バラエティーにとんだ沢山の授業の中から、あなたにあった授業に参加してください

2011年8月10日水曜日

ひろしまジン大学にて話しをします

8/20に開催される授業「こんなアプリがあったら”いいね!”」にて、少しばかり話しをさせて頂きます

現在、授業への参加者を募集中ですので、お時間のある方はぜひご参加ください

授業の内容については、ひろしまジン大学の授業詳細をご覧ください

ひろしまジン大学「こんなアプリがあったら”いいね!”」

2011年8月8日月曜日

Google Analyticsで検索キーワードをみる

Google Analyticsを良く利用される方にはあたりまえの事だと思いますが、あまり利用していなかった私としては、どのキーワードで来訪者が来たのかをGoogle Analyticsで確認する方法がわかっていませんでした

ちょっと調べると簡単に表示されるのですね
左のメニューから[トラフィック]>[キーワード]を選択するだけ

なんて事はないですが、機能が充実しすぎると見つかりにくい物もあるという事ですね

2011年8月6日土曜日

Kinect 始めました

以前から、やろうと思いながらなかなか手を出せていなかったKinect
ようやく、第一歩を踏み出してみました!!

で、何も判らない状態から、このサイトを見ながら始めます
http://channel9.msdn.com/coding4fun/kinect/Getting-started-with-the-Kinect-for-Windows-SDK-quickly-with-the-Kinect-Quickstarts


まず、Kinect SDK for Windows をダウンロード&インストール
http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

次に開発環境を構築する為にVisual C#2010 Expressをダウンロード
※私はC#で開発するので、C++とかの人は別のVisual Studioをダウンロードしてください
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express

サンプルにアプリを作ってみます
次のサイトを参考にして作成していきます
http://channel9.msdn.com/Series/KinectSDKQuickstarts/Getting-Started

1)新規プロジェクトを作成(WPFアプリケーション)
2)参照設定を右クリックして参照の追加
3).NETタブを選んで名前順に並び替えた後に「Microsoft.Research.Kinect」を探して選択
4)あとはビデオに従っていく

途中、Coding4Fun.Kinectを使う場面が突然でてくるので、予め(http://c4fkinect.codeplex.com/)からzipファイルをダウンロードして、適当なフォルダに解凍しておき、参照設定からWinForm.dllとWpf.dllを読み込んでおくと良いです

5)そのまま、次のビデオへ
http://channel9.msdn.com/Series/KinectSDKQuickstarts/Camera-Fundamentals

6)さらに、次のビデオへ
http://channel9.msdn.com/Series/KinectSDKQuickstarts/Working-with-Depth-Data

そして、ちょこちょこ改造して、とりあえずここまでやってみた。



深度情報の画像が左右逆だけど、サンプルコードが配列を逆に詰め込んじゃってるんだろうな。
まぁいいか。

2011年8月5日金曜日

iSpeech SDK for Androidを試してみた

iSpeechのSDKがmobileプラットフォーム向けに提供されたという事で、さっそくAndroidにて試してみました。

まず、以下URLからSDKをダウンロードして、iSpeechDemoというデモアプリで試してみます
http://www.ispeech.org/developers/android

Text to Soeech[TTS]というボタンを押して、文字を入力した後に[Speak]というボタンを押せば、入力した文字をしゃべってくれます
※ネットワークに接続した状態でないと動作しない事に注意!

この時点では、英語しかダメなので、日本語を話すようにデモアプリを修正する
SpeakActivityにある、 SpeechSynthesisインスタンスのsetVoiceTypeで音声のタイプを指定する
日本語は「jpjapanesemale」「jpjapanesefemale」の2種類が用意されています

     s = SpeechSynthesis.getInstance(SpeakActivity.this);
     s.setVoiceType("jpjapanesemale");




※Developer登録しないと、何を設定していいかわかりませんが、http://www.ispeech.org/text.to.speech.demo.phpにあるChoose a voice to playのHTMLコードをみれば、
設定可能なvoice typeがわかります


日本語でもちゃんと動くことがわかったので、デベロッパーIDを取得して、自分のアプリに組み込もうと思ったところで、問題が発生。

なぜか、Mobile用のAPIキーでは動作しない。。。
WEB等で利用する「iSpeech API for Other Applications」に指定したAPI Keyだと動くのだが・・・

このあたり、まだちゃんとなっていないのかな?

という事で、アプリに組み込むのはひとまずお預け。