SUGARSPOT

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

2011年12月8日木曜日

[Android]ブラウザからアプリを起動する際のメモ

ブラウザからアプリを起動する際のschemeについてメモ

まず、基本的なところから書いておくと起動したいアプリのapplicationにintent-filterを設定する
この時、ブラウザからの呼び出しに呼応するように
<category android:name="android.intent.category.BROWSABLE"/>
の記述が必要

次に、schemeの指定について
ブラウザから<a href="hoge://">ほげ起動</a>のような指定で起動させたい場合は、次のように指定する
<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="hoge"/>
</intent-filter>


でも、これだと
<a href="hoge://fuga">
<a href="hoge://hidebu">
でも起動しちゃうので、もう少し条件をつけて<a href="hoge://fuga">の場合だけ起動するようにする
この場合は、hostを指定すればOK
<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="hoge" android:host="fuga" />
</intent-filter>


これだけでもほぼ大丈夫だけど、さらに分岐させたい場合
例えば
<a href="hoge://fuga/init">で初期処理をして起動
<a href="hoge://fuga/restart">で前回の続きから起動
とかしたい場合は、pathを指定してpathを判別してから処理を振り分けるなどすれば良い
intent-filterの指定はこんな感じ
<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="hoge" android:host="fuga" android:path="/init"/>
</intent-filter>


ここで忘れちゃいけないのが、pathは
android:path="init"
ではなく
android:path="/init"
であること。"/"を忘れないように!

まとめると、URLが <a href="scheme://host/path">といった感じになるので、それに合わせてintent-filterを指定すればOK
他にも色々と指定できるパラメータがあるので、そのあたりは公式なドキュメントをどうぞ

http://developer.android.com/guide/topics/manifest/data-element.html

2011年12月2日金曜日

[Android]UNEXPECTED TOP-LEVEL EXCEPTIONでビルドできない

外部ライブラリを使用している古いアプリ(ADT14以前?)をビルドしようとしたら、次のようなエラーがでた

 [2011-12-02 20:03:16 - xxxxxx] Dx
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lxxx/xxxx/xxx/XxxxxxxActivity;
どうやら、ライブラリを重複して登録しようとしてエラーが発生しているようだ

そこで、私がとった対策としては、.classpathのファイルを開いて外部ライブラリの参照を消して再度ビルド。それで問題なく動くようになりました

※ライブラリの参照やら、配置やらを色々と変えて確認したり、色々な方法を試したあとで上記方法を作業しました。ですので、上記方法だけで本当に解消するのか保障はできませんが、いまは再現させられない状態なので、ひとまず参考程度と思ってください

2011年11月21日月曜日

[Android]HttpClientでサイズの大きい画像が取得できない場合

サイズが大きいといっても1MBや2MBといった話しではなく数百キロByteの場合でもHttpResponseのcontentから取得できたInputStreamをBitmapFactoryに流し込んでもエラーとなる事がある

--- decoder->decode returned false


こんな感じにね

そんな時は、BufferedHttpEntityを使いましょう
実際のコードを以下に。(画像のURLは適当です)


HttpUriRequest httpRequest = new HttpGet("http://hogehoge.com/sample.jpg");
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(httpRequest);
HttpEntity httpEntity = httpResponse.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(httpEntity);
Bitmap image = BitmapFactory.decodeStream(bufHttpEntity.getContent());

2011年11月8日火曜日

[Android] BeanをIntentにセットできるようにParcelableにする

よく忘れるので自分用にメモ

必要なこと
  1. Parcelableを実装したクラスにする( implements Parcelable)
  2. Parcelable.Createrを実装したCREATERというstaticな変数を用意する
  3. Parcelを引数にとるコンストラクタを用意する
  4. writeToParcelで登録する順番と、上に書いたコンストラクタで読み出す順番を同じにする
実際に書いてみると


import android.os.Parcel;
import android.os.Parcelable;

public class Employ implements Parcelable {

    public int id;
    public String name;
    public int age;
    public String address;

    public Employ() {
    }

    private Employ(Parcel in) {
        id = in.readInt();
        name = in.readString();
        age = in.readInt();
        address = in.readString();
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeString(address);
    }


    public static final Parcelable.Creator<Employ> CREATOR = new Parcelable.Creator<Employ>() {
        public EmploycreateFromParcel(Parcel in) {
            return new Employ(in);
        }

        public Employ[] newArray(int size) {
            return new Employ[size];
        }
    };
}



[Android]EditTextのカーソルを左上にする

よく忘れるので自分用にメモ。

EditTextのgravityを指定するだけ

    <EditText
      android:id="@+id/memo"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:height="100dip"
      android:gravity="top|left"/>

2011年11月3日木曜日

BinaryNumber BatteryWidgetをバージョンアップ

ずっと前から気にはしていたのですが、海外ユーザーさんからメールを貰って修正する気力が沸いてきて、ようやく修正しました

メールを貰ったのは9/20で、気力が沸いたのがついさっきです


問題だったのは、バッテリーウィジェットがバッテリーの残量が変化するのを監視しているの訳ですが、この監視するサービスが強制停止されてしまうと、その後でバッテリーが変化しても表示が変わらないという問題

で、これを解決する方法はネットを探すと色々と情報が出てきます

やった事は2つ

1)AndroidManifest.xmlのintent-filterに以下を追加

<action android:name="android.intent.action.USER_PRESENT" />

これは、ユーザーがスリープ状態から復帰するのを通知して貰う為に追加

2)そして、その通知を受けたら監視を再開するようにBroadcastReceiverのonReceiveに処理を追加

if (action.equals(Intent.ACTION_USER_PRESENT)) {
    Intent forceUpIntent = new Intent(context,
        BatteryWidget.UpdateService.class);
    context.startService(forceUpIntent);
}

たったそれだけ

これで使いやすく?なった BinaryNumber BatteryWidgetを、どうぞご利用ください(一部のマニア向けですが・・・)



http://sugarspot.net/android_app/bnbw.html

2011年10月31日月曜日

[Android] ADT14でConversion to Dalvik format failed with error 1

アプリを作って、さぁマーケットに登録!
と、思いproguardの設定をしてapkを作ろうとしたら「Conversion to Dalvik format failed with error 1」が発生
調べると、このエラーの発生原因は様々で、色々な対処法が書いてありました
しかし、解決せず

ICSが発表になってADT14に変わったことで、何か起こったかな?とおもい一番怪しいproguardをキーワードに調べると、どうやらjarファイルを書き換えると動くとの情報を得た

参考にしたサイト:http://davematthew.blogspot.com/2011/10/compiling-with-android-adt-14.html

このサイトを参考にして、proguardの最新版をダウンロードして、jarファイルを変更(念の為、古いjarはバックアップしておいて)

そのあとで、プロジェクトをクリーン後にapkファイル作成で、無事に生成できました


ひとつ不安なのは、proguardが4.7betaという所
大丈夫かな・・・

※その後、proguard4.6(betaではない物)でやり直してみましたが、こちらでも問題なく行きました
 betaじゃないぶん、こちらの方が安心かな。

2011年10月19日水曜日

Android 4.0が発表!Galaxy Nexusも

本日、新しいAndroid 4.0(コードネーム IceCreame Sandwitch)が発表となりました
ウィジェットのリサイズが可能になったり、フォルダが作れたりと良さそうですね

ロック画面からカメラが即起動できるのも嬉しい所です
 スクリーンショットの取得も簡単にできるようですよ

テキストの編集では、ドラッグ&ドロップで選択範囲を移動できるなど改善が見られます
地味な機能ですが、非常に便利そうですね。早く使いたいです!!

その他、
・顔認識によるロックの解除
・音声入力(デモをみるとかなり早いですね)
・ブラウザも新しいデザインに!
・GMailアプリも新デザインに!Action Barが下に移動して、操作しやすくなってますね
・カレンダーアプリも。使いやすくなってピンチイン、ピンチアウトで表示形式が切り替えられる
・カメラではHDR撮影や、パノラマ撮影ができる
・NFCがAndroid Beamという名称で搭載されています
    →利用中のアプリの情報を他の端末に送る
  →表示しているMapを他の端末に共有する
    →その他にもいろいろな事ができそう!!

そんなAndroid 4.0を搭載したGalaxy Nexusを11月にdocomoから発売する事も正式に発表されましたので、早く予約しに行かなきゃ!!(予約はいつからだろ?)

NTT docomo GALAXY NEXUS SC-04D

残念なのは、docomo版はおサイフケータイが無いし、Xi対応でもない。
おサイフケータイ(FeliCa)はなくても良いからNFC(Android Beam)は残して欲しい

2011年10月18日火曜日

iOS5のキーボードで出てくる絵文字キーボードを外す

iOS5で文字入力をしようとした場合、地球儀のマークを押すとフリック入力や、フルキーボードと入力が切り替えられるわけですが、iOS5になってから絵文字も切替可能になってるようですね

「絵文字使わないので邪魔!」

という、私と同じような方は、[設定][一般][キーボード][各国のキーボード]でキーボードの設定を開き、画面右上にある[編集]を押して不要なキーボードを削除すればOK

削除したキーボードは[新しいキーボードを追加]から追加できるので削除も安心ですね

あとは、もし・ひょっとして・まんがいち絵文字が入力したくなった場合は”えもじ”と入力して変換すればOKです


2011年10月13日木曜日

動的ビューにしようと思ったけれど

このWEBLOGはBloggerを利用させて貰っています
いろいろなデザインを選べて楽しいので、先日導入された「動的ビュー」と言われる物にデザインを変えてみようと、色々とイジっみた後に困った事が出てきた

Syntax Highlighterが使えない・・・。

Syntax Highlighterは、プログラムのコードを書いた際に色をつけたり、見やすくする為に利用してるのですが、JavaScriptのコードなどを埋め込む必要があるためHTMLをカスタマイズできない動的ビューでは導入できないようなのです

と、いう事で動的ビューへの変更は断念しました
なんとなく、面白そうだったんだけどな。。。残念 です

2011年10月6日木曜日

[Android]RapidMailを公開しました

私は普段、自分のタスク管理をGmailで行っています(プログラムを作る時はTracを利用していますが、それ以外の場合)
簡単な物だけですがメールの先頭にTODOという文字をつけて自分宛にメールをする事で、TODOという文字をキーワードに自動振り分け->TODO管理をしています

その他にもアイディア技術情報などいろいろなキーワードで自分宛にメールを送って、それを管理しています

しかし、普段から「思いついたらすぐにTODOメール!」とやっていたのですが、いちいちTODOと書いたり、宛先のメールアドレスを書いたりが面倒だと思っていました

そこで、知り合いの「ひむひむ」に、やりたい事を説明してiPod touchで使える簡単メールアプリを作って貰いました(すぐに自分で作らなかったのは、単に忙しかったから・・・)

作って貰って、実際に使ってみると私にとっては非常に重宝するアプリでした
まぁ、自分が欲しい物をお願いした訳ですから、当然といえば、当然ですよね

そして、ようやく少しだけ時間が取れたのでAndroid版を作ってみたという次第です




















本当は、メールアドレスを電話帳から選択できるようにしたり、入力の文字数や形式のチェックなども入れたかったのですが、アプリを作る時間がタイムアップとなってしまったので、ひとまず現在の状態で公開しちゃいます


何ができるか?の詳しい説明は公式ページを用意していますので、そちらをご覧ください

RapidMail 公式ページ

まだ出来る事は少ないアプリですが、これから時間を見つけては機能追加していく予定ですので、気長に気楽にお使い頂ければ幸いです


あっ、そうそう。iPhone,iPod touchで使える同じ「RapidMail for iOS」は、そのうち「ひむひむ」がApp Storeに登録してくれると思います。
iOS利用の方は、その日まで少々お待ち下さいませ

ひむひむへ>iPod touch版作ってくれてありがとう!iPod touchでも使いたいので正式公開まってますよー 。(今端末にインストールしてくれてる分で十分なので、私は急ぎません)



CSS Nite in HIROSHIMA vol.4


11月19日に第4回目となるCSS Nite in HIROSHIMA が開催されます
今回のテーマは「スマートフォンビジネスについて考えてみよう」です

講師は
・安田 英久(やすだ ひでひさ)
    株式会社インプレスビジネスメディア Web担当者Forum 編集長

・岩本 崇(いわもと たかし)
    アドビシステムズ株式会社

・鷹野 雅弘(たかの まさひろ)
 株式会社スイッチ

・児玉昇司(こだま しょうじ)
 エス株式会社

・佐東 弘一(さとう こういち)
 株式会社デジタライズ

・佐藤 歩(さとう あゆむ)
 有限会社アップルップル

と、豪華な講師陣に加えて僭越ながら私も話をさせて頂きます

私は主にAndroid向けのアプリケーション開発を行なっており、これまでにお客様に依頼して頂いたアプリから、自分で公開しているアプリまで数多くのアプリ開発に携わってきました
 CSS Niteはデザイナーさんの参加が多いようなので、「Androidアプリ開発者からデザイナーさんに伝えたい事」をテーマとして話をしたいと思っています

・アプリだとデザインでどこまで出来るの?
・アプリに組み込む画像はどうすればいいの?
・画面サイズたくさんあるけど、どうすればいいの?
・縦長、横長、タブレットいろいろあるけど、何すればいいの?
・デザイナーだけどアプリ作りたい!どうすれば?

といった事から、Androidアプリを開発したことでの困った事なども話が出来たらいいな。と、思っています

話の内容は、これから他の講師の方のテーマをみて調整して決めたいと思っていますので、上記内容からは変わるかもしれませんが「何か作りたい!」と思ってもらえるような内容になればと思っています

どうぞ、よろしくお願いします!!

CSS Nite in HIROSHIMA vol.4 公式ホームページ

2011年10月4日火曜日

ひろしま国際平和マラソンへ向けてトレーニング開始

昨年も参加したのですが、今年も申し込みました「ひろしま国際平和マラソン
普段あまり運動ができないので、”マラソン走るぞ”と申し込んでやる気を出すようにしています。最終的な目的は走る事ではなく、体重を落とす事なんですどね
マラソン申込ドリブン型ダイエットです

なので、結果的に「ひろしま国際平和マラソン」に参加できない事態になったとしても、それに向けてトレーニングをして、体重が落ちればノルマクリアです

昨年は、結局トレーニングが続かず体重が落ちないまま「ひろしま国際平和マラソン」に参加して、ノルマクリアできずだけど、マラソン参加はクリアみたいな中途半端な事になってしまいましたが、今年は体重落とさないと10km走るのが辛そうな状態なので、頑張ってトレーニングをします!!



たぶん。





きっと。

2011年9月27日火曜日

[Android]DialogのEditTextに初期値を指定する

FacebookにDialogのEditTextに初期値が設定できないという書き込みがあったので、そのサンプルを簡単ですが書いてみました



2011年9月22日木曜日

あと4本

今年の最初、独立した際に決めた目標があります
1.Androidのアプリを10本リリースする!
2.有料アプリを5本リリースする!
3.ゲームアプリをリリースする!

この3つを掲げたわけですが、まだどれも達成できていません。。。
今の所では
アプリのリリース本数は6本
有料アプリは1本
ゲームは・・・作れてません

すくなくとも、あと4本はアプリをリリースしたいと思っています
 作ろうと思っているアプリのアイディアはあるのですが、制作時間の確保とやる気を出すのが一苦労

それでもあと3ヶ月と少し、目標めざしてがんばります!!

2011年9月9日金曜日

Androidアプリ「Blogger」からの投稿テスト

AndroidのアプリとしてBloggerがGoogleからリリースされたので、試してみてます
(iOSでもリリースされてます)
簡単な記事なら書けそうです
入力のサポートとしては、太字、イタリック、リンク設定、写真投稿のみ。
リンクを設定してみた
リンクはテキストを選択したあとで!URLを直接入力なのですね
写真も投稿してみよう。
写真は、カメラorギャラリーから選択できます
写真は、どこに配置されるのか不明ですが、これを読んでる人には見えてるんでしょうね。






※アプリからの投稿後に確認してみた
・空行で行間を空けてみたけど、無視されてます
・投稿した写真は、一番下に表示されるのですね

Yahooの経路地図がイイ感じ!

 「経路地図API」で道案内に特化した地図をつくる
というブログを見て知ったのですが、 Yahooで経路地図のAPIが公開されたのですね

これを見ると、数パターンの表示方法と、地図上に座標を指定してフリーテキストが書けるなど、色々と楽しく使えそうです!

試しに、もよりの駅から事務所のあるビルまでを表示させてみました


・指定する緯度、経度はカンマ区切りでスペースなど含まないように注意
・テキストを表示する場合はUTF-8でURLエンコードしたものを指定する必要があります

Google Mapの場合、規約で使えない場面もあったりするので、これは非常に嬉しいですね!

■Yahoo経路地図
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/routemap.html

2011年9月7日水曜日

DevQuizにチャレンジしよう!

Googleの開発者向けイベント「Google Developer Day 2011 Japan」が2011年11月1日に開催されます
このイベントはGoogleに関わりのある様々な技術のセッションが設けられGoogleのエンジニアや、専門家から話しが聞けたり、直接質問をする事ができます

この「Google Developer Day 2011 Japan」は、参加申し込みすれば誰でも参加できるという物ではなく、参加資格を得る為に「DevQuiz」というクイズイベントに参加して、参加権をGetする必要があります

昨年が1400名近い参加者だったと思いますが、今年も昨年と同じくらいの人数が参加できると思います
今年は、事前申し込みした人の中から、日ごろのGoogleへの貢献度が高い?Developerには優待枠(Top Favorites 枠)として既に参加が認められている人もいます
よって、DevQuizでは1000人くらいの参加者が選ばれるのではないかと思います(人数は、あくまで私の想像です)

そういえば、Open Callというイベントがあって、そこで参加権を獲得した人もいますね


■「Google Developer Day 2011 Japan」の申し込みは以下URL
http://www.google.com/events/developerday/2011/tokyo/


で、今回の記事の話しはというと

この「Google Developer Day 2011 Japan」に参加しましょう!というのではなく、参加する。参加しない。に関わらず、楽しいから 「DevQuiz」をやりましょうよ!!という話しです


クイズは、次のような感じです


■問題
○ウォームアップクイズ
 クイズ    -   / 40
○分野別クイズ (最大2問が得点に加算されます)
 Web Game  -   / 30
 Go!    -    / 30
 Android  -    / 30
 Google Apps Script -    / 30
 一人ゲーム   -    / 30
○チャレンジクイズ
 スライドパズル  -    / 50

 合計  / 150


最初の「ウォームアップクイズ」は、Googleの技術に関する設問に答えるだけ
調べると解る問題ばかりです

次の「分野別クイズ」は、5種類の問題から2つを選んで回答するクイズ。これは、実際にプログラムを書いて答える問題ですが、人力でなんとかなる(なるか?)物もあります

最後の「チャレンジクイズ」これが、今回のメインですね
問題を解く為に、最適なアルゴリズムを検討して、速度や正解率を上げる為に工夫をしていく非常にやりがいのある問題になっています
 (※詳しい内容は、ここでは触れません。ぜひ参加して確認してください)

全体的には昨年よりも簡単な物が多いですが、今年も楽しくDevQuizにチャレンジしています!
みなさんもチャレンジしてみましょう!!


ちなみに、私は 優待枠(Top Favorites 枠)を頂いたのでDevQuizにチャレンジする必要はないのですが、楽しいので仕事の合間に息抜きとしてチャレンジしてます!(たぶん、DevQuizの上位得点者の多くは同じなんだろうな)

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だと動くのだが・・・

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

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

2011年7月30日土曜日

Androidの着信音にmp3を設定する

 非常に簡単。

SDカードに「ringtones」っていう名前のフォルダを作って、そこに着信音にしたいmp3とかの曲を置くと、[設定]の着信音設定から曲が選べるようになっているので、着信音に設定するだけ

同様にアラームの場合は、「alarms」 、通知音の場合は「notifications」って名前のフォルダに曲を入れればOKです

参考までに。

※端末とか、Androidのバージョンによって設定できない場合もあるかもしれませんが、そのあたりはご容赦ください。

2011年7月22日金曜日

docomo パレットUIでのライブ壁紙は鬼門?

この数週間ほどライブ壁紙のアプリを作っては調整するを繰り返してましたが、結論として

docomo パレットUIは注意!


ということ。


onOffsetsChangedでの値がおかしい話は以前書きましたが()、タッチイベントもおかしいです
画面の切替(スワイプして画面移動)の際もタップイベントが送出されて、タップとスワイプを区別する事が出来ない

docomoさん、早く更新を宜しくお願いしマース

「恐怖のおるすばんライブ壁紙」作りました

広島の街中にある基町クレドで紙屋町お化け屋敷「恐怖のおるすばん」が開催されています
この度、宣伝活動の一環として、Android向けのアプリ「恐怖のおるすばん ライブ壁紙」を制作・リリースしました


いってみたら、普通の壁紙です。
ですから、普段利用の壁紙として使ってみてください




ただし、真夜中の利用は控えた方が・・・・(何が起こっても保障は出来ませんのでご了承ください








■紙屋町お化け屋敷「恐怖のおるすばん」(http://orusuban.org/)

2011年7月12日火曜日

AndroidのLiveWallpaperで画面切替を確認する

前回の記事「AndroidのLiveWallpaperで画面切替を判定できない?」で各端末で画面が切替わるタイミングを数値で表示していましたが、その数値を取得する為に使った自作のアプリを公開しておきます

ご自由に利用ください。
(取得できるのは、横向きの移動だけで縦方向の移動は画面に表示していません)


値はそれぞれ次ぎの事を意味しています
offset:画面全体を1とした場合の現在の位置
step:画面が切替わった際にoffsetをどれだけ増加させるかの増分
pixels:現在の表示位置
width:1画面のサイズ


※色々な端末の情報が欲しいので可能でしたらテスト結果をsato(a)sugarspot.netまで送付頂けると助かります。その際、端末情報と利用されているHOMEアプリを教えて貰えると助かります

※上記メールアドレスは(a)を@と読み替えてください
※報告頂いた情報はこちらに掲載していきます








また、同じように検証用としてタッチ(タップ)で切替可能かのテストで利用したアプリも置いておきます

2011年7月11日月曜日

AndroidのLiveWallpaperで画面切替を判定できない?

ここ数週間ほど、ライブ壁紙で画面が切り替わりを識別するのに苦労している
画面は、画面を指でスクロール(スワイプ?)する事で 切り替わるのだが、その切り替わりをライブ壁紙でどのように検知するか・・・

画面のスクロールはonOffsetsChangedで簡単に取得できる
そして、標準のHOMEアプリで動くライブ壁紙であれば、画面の切替わりは問題なく判別できる

問題なのは、カスタマイズされたHOMEアプリの上で動作させる場合だ
現在、docomoのパレットUIでは、onOffsetChangedで渡される値からは判別が不可能と判断した
同様にXperia acroも判別が不可能だ

検証の為、いくつかの端末で、画面が切替わった際にonOffsetsChangedへ引き渡される値をメモしておいたので、載せておきます


※横方向だけの値です
※onOffsetsChanged(float offset, float arg2, float step, float arg4, float pixcels, float arg6)
※wallPaperWidth:画面の横幅
※pageWidth:壁紙1画面の横幅


Nexus one





1 2 3 4 5
offset 0 0.25 0.5 0.75 1
step 0.25 0.25 0.25 0.25 0.25
pixels 0 120 240 360 480
wallpaperWidth 600 600 600 600 600
pageWidth(wallPaperWidth * step) 120 120 120 120 120






Galaxy Tab(SC-01C)





1 2 3 4 5
offset 0 0.25 0.5 0.75 1
step 0.25 0.25 0.25 0.25 0.25
pixels 0 150 300 450 600
wallpaperWidth 600 600 600 600 600
pageWidth(wallPaperWidth * step) 150 150 150 150 150






Galaxy SⅡ(SC-02C) パレットUI





1 2 3 4
offset 0 0.33 0.67 1
step 1 1 1 1
pixels 0 160 320 480
wallpaperWidth 480 480 480 480
pageWidth(wallPaperWidth * step) 480 480 480 480






IS03





1 2 3 4
offset 0 0.33 0.67 1
step 0.33 0.33 0.33 0.33
pixels 0 213 427 640
wallpaperWidth 640 640 640 640
pageWidth(wallPaperWidth * step) 213 213 213 213






Xperia acro





1 2 3 4 5
offset 0 0.25 0.5 0.75 0.99999
step 1 1 1 1 1
pixels 0 120 240 360 480
wallpaperWidth 480 480 480 480 480
pageWidth(wallPaperWidth * step) 480 480 480 480 480

2011年6月29日水曜日

AndroidのHTTP通信をのぞく

あちこちに情報が出ているので、これは自分用のメモ。

必要なもの
エミュレーターの場合:なし
実機の場合:root権限

やりかたは、エミュレーターでも実機でも同じです
非常に簡単

1)以下のコマンドを実行する
>adb shell tcpdump -vv -s 0 -w /sdcard/output.cap

※これでsdcardにouput.capというファイル名で情報が蓄積されている

2)確認したいアプリを起動して、動かす

3)adb shellを終了

4)sdcardのoutput.capをローカルPCにコピー

5)wiresharkなどのツールでoutput.capを開いて内容を確認

これだけ。

実機の場合は、次の事が必要になります
a)エミュレーターからtcpdumpを取ってくる
b)取ってきたtcpdumpを /system/xbin/にコピーする
c)権限を付与する
> adb shell chmod 6755 /system/xbin/tcpdump

あとは同じ。

2011年6月27日月曜日

FeceDetectorで目の位置を検出する

AndroidのFeceDetectorは便利だけど、万全ではない
なぜならば、顔の傾きが取得できないからだ

取得できるのは、両目の距離、そして両目の中心点の2つだ
この情報から、顔の位置を特定する事はできるが、目の位置を見つけるのは非常に難しい
なぜならば、顔が斜めに傾いている時目の上下位置を判別することができないからだ

では、どうするか
これはもう、自力でやるしかない
私は、次のように処理してみた(もっと簡単な方法があるかもしれないので色々と調べてみてください)

1)FeceDetectorから取得できる情報から、だいたいの目の位置を計算
2)だいたいの目の位置の画像を2値化して、さらにノイズを除去する
3)2直化した中から一番黒の領域が多いと所を瞳として判断する

こんな感じで処理してみた。
精度はなかなか高く、しっかりと目だけを検出できる
ノイズを除去する際に閾値によっては検出率が変わるので、閾値を調整して見ると良いです

2011年6月17日金曜日

FaceDetectorで顔を認識しなくて困った

いまAndroidアプリで顔認識をやっている訳なのですが、微妙な事で顔を認識したり、しなかったりと謎のハマリかたをしてしまいました

顔を認識せずによくあるのが、BitmapをARGB_8888にしてしまっている時
こんな時はRGB_565にすればいい
この情報は色々な所で目にするので、あまり困らないと思います

で、今回困ったのは、レイアウトで、認識させた画像(もしくは、近辺の部品)に対してpaddingを指定した場合に、認識が失敗したり、しなかったり
同じプロプログラムでも、実機では認識するけどエミュレーターでは認識しない
その逆に、実機では認識しないけど、エミュレーターでは認識するなど

で、悩んで色々とGoogle先生に聞いてみたりしたけど解決策が見つからず
そこで、初心に戻りFaceDetectorのAPI Docを見てみました

すると、こう書かれています(FaceDetector)
Creates a FaceDetector, configured with the size of the images to be analysed and the maximum number of faces that can be detected. These parameters cannot be changed once the object is constructed. Note that the width of the image must be even.

前半部分は良いとして、後半の
Note that the width of the image must be even.

をちゃんと読んでいませんでした。。。
ちゃんと「横幅は偶数じゃないとダメですよ」って書いてあります

今回のアプリは、画像を表示サイズにリサイズしていたので、利用環境によって画面サイズ(画像サイズ)が変わってしまい、認識したり、しなかったりした訳ですね
paddingの入れたり、外したりも同様にサイズが変わってしまうからですね

今回の教訓は「ちゃんと公式のドキュメントはみるべし!」ですね 。"ちゃんと"の部分が重要です

2011年6月8日水曜日

スティックスイーツのスペシャル番組

今月の6/15 21:00から「ふ〜みんのSwwweets+」というUstream番組でスティックスイーツのスペシャル番組があります

番組では、スティックスイーツの商品紹介や、裏話とかも聞けるかも?
さらに、プレゼントの話しもあるかも?とか・・・(twitter:@fu_min_FSJからの情報)

これは楽しみですね!

番組は以下のURLから見れるようです
6/15の21:00からパソコンの前でスイーツな時間を過ごしましょう!!
http://augment8.org/fspsss/index.html

2011年6月2日木曜日

クックパッドに行ってきました(開発コンテスト24表彰式)

5/29に東京は白金台にあるクックパッド様にお邪魔してきました
目的は先月行われた「開発コンテスト24」の表彰式のためです

「クックパッドの社内一度みてみたい!」というミーハー心が9割での上京です


入り口からして、なんだかおしゃれですね。

 

開発ルームの横にあるキッチン。お昼ごはんとか作るそうです


ミーティングができるように長い机


そしてなぞの温水器!




お菓子、飲み物も常備。うらやましい


こういう落ち着ける場所が、開発する横にあると嬉しいですね


息抜きのゲーム。これは必要ですよね!仕事として!


お土産にいただきました。

額にはいった賞状。うれしい!

懇親会でご飯。手作りです。
表彰式の間、いい音といい匂いしてました!



こんなおしゃれなオフィス。羨ましい!

enchant.js + Android

5月の広島WEBシステム勉強会でenchant.jsをやってみようという話になりまして、enchant.jsを色々といじってみました

このenchant.jsは簡単なゲームを作るには、とても優れたライブラリです
簡単にキャラクターを配置し、動かす事ができますし、ゲーム用にコントローラーなども提供されています

簡単とはいえ、勉強会の短い時間の中でゲームが作れるかというと、そうでもないのでAndroidやでアプリとして組み込めるか実験をしてみる事にしました

enchant.jsはJavaScriptなので、assetに必要なjsファイルや、htmlを格納し、WebView経由で表示させてみました
結果は、何も問題なし!

では、次にAndroidのセンサーを使って、ゲーム内のキャラクターを動かせるかやってみました
AndroidのWebView とJavaScriptをブリッジして、センサーの情報をJavascriptに渡すだけなので、実験しなくても動作するであろう事は分っていたのですが、試しに作ってみると予想通り動きます

これで、比較的簡単にセンサーを活用したゲームが作れそうです

これを使って「広探ゲーム」の中にミニゲーム的要素をいれるのもありかな?
とか色々と広がりそうです!

※タイトル変更しました。よく考えたらTitanium Mobile使ってなかった。。。

2011年6月1日水曜日

AndroidでOpenCV

※早速、情報が古いようだ・・・

どうやら、環境の構築方法が変わったらしく、Windowsの場合はcygwinを使わなくなったようだ
環境の構築については、以下のサイトを参照してください


 OpenCVWiki Android Trunk



以下の記事は古いので注意が必要!

なかなか旨く行かなかったので、自分用のメモとして書いておく
まず、最初に参照したサイト記事ではOpenCV のmakeが通らなかったが、環境構築ではコチラを参考にしたので、載せておく

androidでOpenCV(環境構築編) – Android

ちなみに、環境はWindows7 64bit。
上記サイトのmakeコマンドを実行して25%のところで



となる。

そこで、この問題を解決する為に調べているとOpenCV 1.1だが簡単に出来そうなサイトが見つかったので、以降はそのサイトを参考とした

OpenCV in Android

  1. Androidの環境が作ってあれば、次のように作業すれば始められる
  2. 新しいプロジェクトを作る
  3. プロジェクトのルートにjniというフォルダを作る
  4. 上記サイトからダウンロードしたandroid-opencvを解凍して、中身をjniフォルダにコピー
  5. cygwinでプロジェクトルートからndk-buildを実行
  6. そうすると、libsフォルダにarmeabi/libopencv.soが作られる

動作確認は、上記サイトにandroid_opencv_exsampleという物があるので、それをダウンロードして動かして見ると良い

以上。