Powered by Google

2011年8月31日水曜日

SmileMask


先日、アンドロイドアプリを公開しました。
その名もSmileMask。SmileMaskは、あなたやあなたの友達の口を撮影して、それをマスクのように口にあてて使用するアプリです(説明文より)。さて、開発はてこずりましたが(http://misolog.blogspot.com/2011/07/5.html)、公開にも3つの試練があり、意外とてこずります。

試練1. 25$支払ってデベロッパーになる
アンドロイドアプリをマーケットで公開できるようになるには、デベロッパーの登録が必要でした。
https://market.android.com/publish/
デベロッパーサイトはマーケットからリンクが貼られていないので探すのが大変でした。また登録料として年間25$必要でした。PicasaやGoogleAppsドメインなどと同じようにGoogleCheckoutでクレジットカード決済が使用でき簡単に登録できてしまいますが、後で忘れた頃にマーケットから請求がくるので注意が必要です。どうでもいいアプリを買ってしまった!と慌てる前にデベロッパーのことを思いだしてあげてください。

試練2. アプリのキャプチャ画像を2枚用意する
アンドロイドアプリをマーケットで公開するとき、キャプチャ画像が2枚必要です。これも最初は公開する直前に知ることになるので注意が必要です。私のSmileMaskは画面が1つしかなかったので、2枚作るのに苦労しました。使用イメージを用意すれば、よりよいのでしょうが、作るのが大変なので、メイン画面のボタンを押す前と後の2枚で登録しました。eclipseのDDMSの機能を使うとエミュレータのキャプチャが撮れます。

試練3. アプリに署名をつける
マーケットで公開できるアンドロイドアプリには署名が必要です。eclipse上で公開したいアプリの「Androidツール」→「Export Signed Application Package」から署名をつけることができます。有効期限は1~1000年設定できます。夢を持って1000年としました。

公開
アプリをアップロードして公開しました。半月で74ダウンロード。18インストール済み。らしいです。そして、なんと星とコメントをつけてくれた人がいたようです。星5でかなり好意的なコメントでした。嬉しい!

開発者のみが見れるデベロッパーコンソールでは、開発したアプリのインストール数-アンインストール数の変化や、どの国や言語のユーザがいるのか、どんな端末のユーザがいるのか、統計を見ることができます。
Android2.2が半分、2.3がその半分、2.1がさらにその半分、1.6と1.5はそれぞれ5%弱のようです。私のアプリは1.6以降対応なのですが、2.1以降で十分かもしれません。言語は英語55%、韓国語20%、日本語5%と意外と韓国語が多いですね。私のアプリは英語日本語対応なので、まあまあ市場をカバーしているようですが、韓国語サポートも視野に入れるべきかもしれません。ちなみに日本語でインストールした3人は全部知り合いだと思います。

2011年8月16日火曜日

カロリーオフ

夏は暑い!
そして暑いとのどが乾きます。
でもジュースを飲むとカロリーが気になる。
というわけで、カロリーオフの清涼飲料水のお世話になることが良くあります。

今回はそんなカロリーオフ清涼飲料水の中で炭酸飲料にスポットを当ててみました。


大人のキリンレモン

甘さ控えめのキリンレモンです。炭酸の強さは普通。レモンの味が効いていて、飽きがこなく飲みやすい味です。

味 :☆☆☆
炭酸:★★★





ゼロスパークリング グレープフルーツ

果汁が入っていると謳っているだけあってフルーティな味わいです。炭酸は弱め。生絞り系チューハイからアルコールを抜いたような感じです。値段は他のペットボトル商品より少し割高。

味 :☆☆☆
炭酸:★★




ダイエー ゼロカロリーシリーズ

ダイエーで販売しているゼロカロリーの清涼飲料水350ml缶シリーズです。サイダー・レモンライム・ジンジャーエール・グレープフルーツ、そして他にコーラがあります。
味は人口甘味料を結構感じてしまいますが、この商品の長所は安いこと(350mlで38円)ですね。
味 :☆
炭酸:★★★

ペプシNEX

コーラ系ではコカコーラZEROよりはこちらの方が好きなのでよく飲みます。少し酸味があり炭酸も強め。カフェイン含有なので夜に作業をしたいときに特にお世話になります。

味 :☆☆☆
炭酸:★★★★




ウィルキンソン ジンジャーエール

カナダドライのジンジャーエールのような一般的?なジンジャーエールとは一線を画し、強烈にジンジャー(生姜)の味を感じます。炭酸もかなり強めで、味と相まってむせるほど。この辛さはかなり気に入っています。

味 :☆☆☆☆
炭酸:★★★★★




ペプシDRY

甘くないことをウリにしたペプシコーラ。甘味料は人口甘味料ではなくブドウ糖果糖液糖なのでそれなりにカロリーはあります。確かに甘くなくすっきりしているのですが、何かちょっと物足りない。炭酸は強め。

味 :☆☆
炭酸:★★★★




CCレモン ZERO

レモンを前面に押し出していますが、すっぱ過ぎず飲み口は良いです。炭酸が弱めなのでもっと強ければさらに良いのですが。

味 :☆☆☆
炭酸:★★





ヘルシアスパークリング

カロリーオフ清涼飲料水といえばこの商品が火付けではないでしょうか。茶カテキンとグレープフルーツの苦味がほどよく、個人的には一番好みの飲料です。ただ、少しお値段が高いので気軽には飲めません。

味 :☆☆☆☆☆
炭酸:★★★★




個人的なランキングでは、炭酸の強さはウィルキンソンのジンジャーエール、味はヘルシアスパークリング、がオススメということになりました。
他にも、これがオススメだよ!という商品があれば是非教えてください。

2011年8月8日月曜日

Android 便利な shapeタグ

Androidでボタン等作る場合に便利なのが<shape>タグです。

私はこれを知らなかったときは画像を作ってボタンを配置してましたが
知ってからはタグを使うようになりました。

メリットとしては

・アプリの容量を減らす
・画像を作るより手間が少ない(私の場合)

です。

shapeタグを使う場合は res/drawable-xxx/フォルダの中にxmlファイルを作成します。

全ての構文を知りませんので私がよく使ってるのは下記の様な感じです。

<shape android="http://schemas.android.com/apk/res/android">
<corners radius="10px" />
<padding left="2dp" top="2dp" right="2dp" bottom="2dp" />
<gradient startcolor="#669900" endcolor="#66cc00" angle="270" />
<stroke width="3px" color="#CCCCCC" />
</shape>

conersで四隅を角丸などに設定できます。
gradientでグラデーションのカラー設定を、strokeで枠線の太さ、色を設定できます。

上記のような記載をres/drawable-xxx/test.xmlと保存した場合

レイアウトファイルで

<TextView android:id="@+id/on_btn"
 android:text="撮影"
 android:textSize="20sp"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:clickable="true"
 android:background="@drawable/test"
</TextView>

のようにandroid:backgroundで指定します。

すると



のようにボタンが作れます。
ボタンクリック時に色を変える場合など画像を作って複数用意するよりも
大分手間が少ないかと思います。

使用されていない方は試されてはどうでしょうか。

2011年8月1日月曜日

Android 位置情報取得処理


私のほうの合宿でのアプリは完成できてませんので代わりに
Androidアプリ開発における備忘録です。

少し前にAndroidもユーザの位置情報をGoogleに送信しているとか
騒がれていましたが、実際の位置情報を取得する処理については
どんなものなのか。アプリ開発のために調べました。

結論から言うと思った以上に簡単に実装できます。
ただし、Android の位置情報は端末や OS のバージョンによって
微妙にとれるタイミングやプロバイダがちがうので iPhoneよりは
いくつか考慮が必要になります。

処理手順は

①AndroidManifest.xmlにGPS利用のパーミッションを追加する
②LocationManagerインスタンスを取得
③LocationProviderを取得
④LocationListenerをセット
⑤位置情報が取得できたときの処理を実装


具体的には
①AndroidManifest.xmlにGPS利用のパーミッションを追加する

GPSによる位置情報取得の許可

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

ネットワークによる位置情報取得の許可

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>



②LocationManagerインスタンスを取得
LocationManagerって何?と思われるかもしれませんが、android
のパッケージに含まれている位置情報取得処理用に用意されている
クラスとなります。
つきつめても意味ないので、そういうもんだということで気にせず
使用します。

LocationManagerの取得にはgetSystemServiceメソッドの引数に
Context.LOCATION_SERVICEを与えます。何故か?そういうもんだからです。


locationManager
= (LocationManager)getSystemService(Context.LOCATION_SERVICE);



③LocationProviderを取得
LocationProviderって何?となりますが
一般的なAndroid端末で取得できる位置情報は GPS、3G、Wi-Fiの3種類
GPS は「gps」、3G および Wi-Fi は「network」という文字列で取得できます。
Android ではこの「gps」や「network」のことをプロバイダと呼びます。

このLocationProviderの取得で手間取りました。サンプルプログラム
はゴロゴロしているのですが、どうも端末によって動かない。
※XperiaとHTC Desireで検証

位置情報の更新を取得するには、requestLocationUpdates()メソッドを
呼び出すのですが、この第一引数にLocationProviderを指定する必要が
あります。この第一引数にもってくるための処理がたいがいのサンプル
では、直接 gpsかnetworkをそのまま指定していました。

※直接引数に与えるプロバイダはGPS の場合は
 LocationManager.GPS_PROVIDER

 ネットワークからの位置情報取得の場合は
 LocationManager.NETWORK_PROVIDER を利用します。

直接してしまうと、そのときの状況に応じて対応できませんので
gpsかnetworkのそのときの最適なものを取得できるように実装したいですね。

ではどうするかですが、getBestProvider()メソッドを用いてのLocationProvider
取得というのがネット上のサンプルでは多いです。
ですが、たまたま検証しているDesireでは端末自体に不具合があるらしく
このメソッドを使用しても取得できませんでした。この端末で検証してないと
気付かないところです。

色々探してみると


List providers = locationManager.getProviders(true);
for( String provider : providers )
{
locationManager.requestLocationUpdates(provider, time, distance, this);
}


こういうソースがあったので実装するとDesireでも取得できました。
getBestProvider()ではなくgetProviders()メソッドを使用する方が多くの端末
に対応できそうです。
requestLocationUpdatesの第二引数は更新情報検知のための最小時間間隔、
第三引数は最小距離間隔です。それ以下での変化では検知しないような設定の
ようです。

④LocationListenerをセット
⑤位置情報が取得できたときの処理を実装
LocationListenerのセットは下記のようにActivity自体にimplementしておけば
よいです。

public class XXXXXX extends Activity implements LocationListener


すると位置情報が更新された場合にはonLocationChangedが呼ばれますので
この中に取得した位置情報をどうするかの処理を実装すればよいです。
下記は緯度、経度をログ出力しています。


public void onLocationChanged(Location location) {
Log.v("Latitude", String.valueOf(location.getLatitude()));
Log.v("Longitude", String.valueOf(location.getLongitude()));
}


ここで重要なのが、常に位置情報を取得したい場合でなければ
onLocationChanged()で位置情報を取得後にremoveUpdates()メソッドで
位置情報の更新取得を止めておきます。
止めておきませんとバッテリの減りが尋常じゃなくなりますし、そのまま
アプリが終了されると、次回の挙動が何やらおかしくなることがあります。

以上で、位置情報の取得はできます。
もっと複雑なことができるんでしょうが、とりあえずボタンクリックしたら
位置情報を取得する処理みたいなものを実装したい場合には上記で十分です。


あとAndroidではセキュリティ上システム設定を勝手に変更できませんので
位置情報を取得するには下記のような設定画面でGPSやWi-Fiによる位置情報
取得を許可設定しておく必要があります。

アプリからは直接操作できませんので、設定されていない場合は、設定を
促すメッセージダイアログを出力するなどの処理をいれておいたほうが
いいかもしれません。






牛皿頂上決戦

牛丼チェーン店が提供している牛皿を食べ比べる機会がありましたので、当ブログの人気記事「おひとり様ロールケーキ頂上決戦」をリスペクトし今回の記事とします。


比較対象は日本4大牛丼チェーン店の「吉野家」「すき家」「松家」「なか卯」です。
が、今回は残念ながら松屋の店舗が近隣になく、食べ比べたのは残りの3店舗となります。

牛丼でなく牛皿で比較した理由としては、純粋に具の味を比較するため、と牛丼だと食べきれない恐れがあったからです。


「吉野家」 牛皿280円 / 牛丼(並)380円

いわずと知れた日本を代表する牛丼チェーン店です。
私は牛丼といえばここの味を一番に思い出します。
肉質は他と比べて一番良く、また玉ねぎも大きめでしっかりしていました。
つゆの味は辛すぎず甘すぎずといった感じでしょうか、肉の味が良く感じられました。
味は確かに良いのですが、惜しくらむは今回食べ比べた中では価格が高いということです。
リーズナブルな牛丼という商品で100円近くの価格差というのは結構大きいです。
店舗の雰囲気は、店員がテキパキと働いており良い感じです。客の数もそれなりに多かったですが応対は良く出来ていました。


「すき家」 牛皿180円 / 牛丼(並)280円

2008年9月に店舗数で吉野家を抜き、現在最大手の牛丼チェーン店です。
トッピングが豊富で、牛丼のほかにカレーも推しています。
肉の脂身が他と比べて多く、つゆも醤油の塩分を強めに感じるので味はこってりしっかりついています。
若者向けの味といったところでしょうか。ミソジを過ぎた私の舌には少し濃く感じました。
客の数は一番多く、ほぼ満席状態でした。ただ、店員の応対が悪いのが残念でした。
注文や精算を待っている客がいる中、マイペースでのんびりとしていたり手持ち無沙汰でうろうろしていた店員がいました。
たまたま今回行った店舗がそうだっただけかもしれませんが、一つがそうだと全体もそうだという印象を持ってしまいます。



「松屋」 牛皿250円 / 牛丼(並)320円

牛めし、定食、カレーの三本柱でメニューを構成している牛丼チェーン店。
ここでは牛丼ではなく牛めしという名前で提供しています。
券売機で食券を購入するところが他と比べて独自のシステムでしょうか。
今回、食べ比べることは出来ませんでしたが、味はやや甘めだったと記憶しています。


「なか卯」 牛皿190円 / 牛丼(並)290円

うどんや親子丼にも力を入れている牛丼チェーン店、漫画キン肉マンに登場する牛丼は吉野家がモデルと思われがちですが、実はなか卯がモデルとなっているらしいです。
親会社はすき家と同じゼンショーで、すき家との区別化を図るためすき焼き風味付けの和風牛丼を提供しています。
すき焼き風の和風牛丼ということで、やや甘めのつゆです。
肉は脂身が少なく、量も他と比べて少し多めでした。具に糸こんにゃくも入っているため食べ応えは一番あります。
客はあまりいませんでしたが、店舗は今回の中では一番きれいで店員の応対も良かったです。



そして食べ比べた結果、総合評価で一番だったのは、
ずぼり「なか卯」でした!


肉質具材つゆ応対価格
吉野家
280
すき家


180
松屋-
-
-
-
250
なか卯190

味のみでいえば吉野家が僅差でトップでしたが、価格差がネックとなりました。

ちなみに、紅しょうがも各店舗で味の違いが結構ありました。
個人的な紅しょうがランキングは、吉野家 > すき家 > なか卯 です。


では、良い夏休みを!