投稿

2011の投稿を表示しています

2年ちょっとを振り返って

イメージ
2009/10/17にver.1.0.0をリリースして以来、2年ちょっとの期間で94回のリリースを行ったSmartTraining。ver.6.8.1。たぶん、今年はこれが最後のリリースになると思うので、まとめてこれまでのことを振り返ってみます。去年は振り返ってなかったので今回2年分まとめて。 ver.1.0.0(2009/10/17)のスクリーンキャプチャ。 トップ画面(ver.1.0.0) 計測画面(ver.1.0.0) 設定画面(ver.1.0.0) とにかく、「入門書読みながら初めて作りました」的な雰囲気が満載ですね。元々、Androidで動く万歩計が欲しかったのと、GPSデータの取り扱いの練習用に作ってみようということで作り始めたアプリでした。最初はServiceの使い方も手探り(つい最近のバージョンでようやく正しい使い方を知ったのですが)で、画面を閉じると計測も止まってしまう作りでした。ボタンや画面テーマも標準のものをそのまま使った貧相なもの。アイコンの作り方を知らなかったので、画面上に画像リソースは皆無。ただ、画面は殺風景ですが、基本的な画面遷移や構成は今と変わっていません。MapViewによる地図表示とGoogle Calendarにデータを保存するという機能が最初からありました。 確か、最初に作ろうと思ってから初期バージョンをリリースするまで3ヶ月ほどかかったと記憶しています。たぶん、今これと同じ機能を作ったら1日あれば余裕で作れます。というか、コードを書くことより、どういう画面遷移にしたら使いやすいか?、どういう機能があったら楽しいか?という点を考えることに時間を多く割いていました。あと、たった一個のアプリケーションアイコンがどうしても作れなくて結局嫁さんに作ってもらいました。 江川さんの「 Google Androidプログラミング入門 」片手にひたすら真似するところからスタート。この本には本当にお世話になりました。 そしてVer.6.8.1(2011/12/30)のスクリーンキャプチャ。 トップ画面(ver.6.8.1) 計測画面(ver6.8.1) 設定画面(ver.6.8.1) ラリー画面(ver6.8.1) だいぶ賑やかになりました。アプリを作っていて途

AccountManagerから取得したauthtokenを使用するとFusion Tablesへのアップロードに失敗する件

ユーザの認証情報をAccountManagerに変更した時から、時々「Fusion Tablesへのアップロードに失敗する」という報告を受けるようになりました。 手元にある端末で確認してみると、4台中1台だけがどうしてもうまくアップロードできません。エラーはcreate table時に401。 その後、原因がわからないまま1ヶ月程度過ぎた頃、またアップロードを試してみると、先日うまくアップロード出来ていた他の端末もことごとくエラーcreate table時に401が出ていることを確認。 なんだろうねぇ。何気にと思いググって情報がみたら見つかりました。 http://d.hatena.ne.jp/yellow_73/20110819 まさにこれ。この問題です。 端末に保存されているtokenの賞味期限が切れているっぽい。 401が発生したらAccountManager#invalidateAuthToken()を呼んでauthtokenを破棄した上でもう一回最初から認証のやり直しをすることでうまくアップロード出来るようになりました。 Google DocsやGoogle Calendarにも似たような仕組みで認証かけてデータアップロードしているのに、こちらではそんな状況に陥ったことがない。なんでだろう?Fusion Tablesはtokenの賞味期限が他サービスよりもかなり短くせっていされているのか?と思いました。実際のところわかりませんが。 「 AccountManagerのgetAuthToken()をReflectionでヤッてみた 」で書いたとおり、私のアプリは1.6もサポートしているので、AccountManagerを普通に使うことができない。というわけで、これまたReflectionの登場。前回の記事読めばReflectionのパターンはわかりますよね。ということで省略。

地味だけど重要な変更

久々にSmartTrainingのバージョンアップ(6.6.0)を行いました。 今回のバージョンでは、地味だけど重要な変更を加えています。 ---- ◇ Ver.6.6.0 変更内容 ・使用するパーミッションとライブラリの変更。 ・Android 2.1以降でサービスをフォアグラウンドに設定 ・Android 2.1以降で端末のGoogleアカウントと連動 ・Android 2.1以降で過去に端末内に保存したGoogleパスワードの削除 ---- ・使用するパーミッションとライブラリの変更。 最近、Androidに対する情報セキュリティがいろいろとうるさくなってきました。アプリケーションが持つパーミッションに対する意識も高くなり、ただの万歩計なのになんでそんなパーミッションが必要なの?とコメントをいただくこともでてきました。このアプリケーションは元々私自身がAndroidアプリ作成と公開を通じて様々な知見を得ることが目的で作り始めたものでした。そのため、通常の利用者が必要としないいくつかの機能を含んでいます。ここのところ実験的に取り入れた機能のために与えたパーミッションが増えてきたので、一度整理してみました。合わせて、使用しているパーミッションとその使用目的をAndroid Market上に公開しました。 ---- このアプリケーションが使用する各パーミッションが必要な理由は以下の通りです。 ・データをGoogleサービスにアップロードする際に端末内のGoogleアカウント設定を使用するために必要としています。 android.permission.USE_CREDENTIALS android.permission.GET_ACCOUNTS android.permission.AUTHENTICATE_ACCOUNTS ・画面テーマ変更時に自アプリケーションのリセットのために必要としています。 android.permission.KILL_BACKGROUND_PROCESSES ・GPSによる位置情報を取得するために必要としています。 android.permission.ACCESS_FINE_LOCATION ・広告モジュールが動作するために必要としています。 andr

AccountManagerのgetAuthToken()をReflectionでヤッてみた

AccountManager#getAuthToken()を利用することでAndroid端末に登録したアカウント情報のTokenが取得できます。普通の使い方は こちらあたり に詳しく載っています。 これを利用することで例えばGoogle Serviceへのアクセス時認証に利用できます。取得したTokenをClientLoginの際のAuthに設定してやればOKです。 と、普通はこれで話が済んでしまうのですが、AccountManagerはAPI Level 5以降じゃないと利用できない。これより古い環境でこのコードを実行するとjava.lang.VerifyErrorが起きてしまいます。 これは後方互換性の問題です。Androidアプリを開発する際に気をつけなければいけないのがこの問題。詳しい対処方法は こちら に掲載されています。これらの対処方法のうち、今回はReflectionを利用することで回避してみました。当然のことながら、Reflectionを使ったからといって古い環境でAccountManagerの機能が使えるようになるわけではありません。実行時のVerifyErrorが回避されるだけです。同等のことを古い環境でやる場合は、 Google Data API のClientLoginなりをHTTPリクエスト送ってやればOKです。Java(Android)向けのライブラリも公開されているのでそれを使っても良いと思います。まぁそれはそれで置いといて。 今回主題のやり方はこちら。 public class AuthenticatorAfterForoyo extends AuthenticatorBase { private static final String ACCOUNT_TYPE_GOOGLE = "com.google"; /** * コンストラクタ * @param context */ public AuthenticatorAfterForoyo(Context context) { super(context); } /** * トークンの取得 * @param account * @param passwd 不使用 * @param service

AppLog対応しました

2011/10/10 日本Androidの会10月定例会での発表内容を見た後で追記。 非常に残念な発表内容でした。 Androidの可能性そのものが潰されている気持ちでいっぱいです。 下記の内容を撤回します。 ---- SmartTrainingで AppLog 対応しました。 Twitterでもいろんな意味で 盛り上がって (炎上?)いたり。 AppLogを検出する ツール がでたり。  実際使ってみなきゃ意見を言ってもねぇ。ってことで、使ってみての感想です。  ◆機能面 ログ送信確認画面の表示タイミングが不定。 サービス開始時に確認画面が表示されるわけではない。 どのアプリにAppLogが組み込まれているかわからない。  ユーザとのインターフェイスとして送信確認画面しかないので、このタイミングでどのアプリ経由でAppLogが動いているのかがわからない。 一度許可したら後で拒否するための方法がある。  Marketから「AppLog Opt-in」をインストールして拒否設定に変更できる。後付けで作ったのでこういう状態。いずれSDKに組み込んだほうが良さそう。 ◆それぞれのメリット・デメリット 開発者 メリット 月額報酬 or 収集したログのいずれかが貰える。まだ導入して間も無いので何ももらえてないけど、ログを使って新しい視点で今後の開発に活用していければいいな、と。これまでこういうサービスはなかったので貴重だと思う。(似たような情報はGoogleも収集しているはずだけど、Android端末に関する情報は提供されていないはず)ただ、実際何にどう使えるかは未知(データを見てないので)。 デメリット ちゃんとユーザに説明しないと拒否反応に合う。 当初、Marketの更新情報に「微調整」と書いたことで不評を買ってしまいました。まぁ、ユーザ観点でみたら気持ちいいものではないので、面倒くさがらずにちゃんと「AppLog入ってます」って書くべきだったか。反省してコメント修正しました。 ユーザ メリット 直接的には無い。間接的にはあるかもしれないが、結局開発者次第か。 デメリット 気持ち悪いと感じられる人には気持ち悪く感じられる。 ◆感情面 「ログを取って

Android向けリク美女カレンダー非公式クライアント「RKBJ」リリースしました

イメージ
リク美女カレンダー がイイので、非公式にAndroid向けクライアント作りました。 ダウンロードは こちら からどうぞ。 アイコン他、レイアウト等、各種リソースは他アプリの使い回しという雑な仕様だけどいいじゃないか。 リク美女が見れればそれでいい。 RKBJはリク美女カレンダーを応援しています。 技術的には、 ・ Tagsoup でHTMLパース ・ CalendarView をライブラリ化して利用 ・最初からFragmentを使って実装 ってあたりが自分にとって新しい点です。 今時は必要な部品が全部揃っているので楽ですね。 設計+実装+試験で工数は7人時くらいでした。 たぶんまだ動作がこなれていないかも。 まぁ、いいか。 あと、使ってみてCalendarViewにサムネイル画像を埋め込みたいな。 「もえちゃん何日だっけ。。。」とかなる。 そのうち対応します。

ANT+なセンサー対応4つ目

 今年の5月にSmartTrainingがANT+なフットポッドに対応した後( ANT+なセンサーに対応してみました )、8月くらいに心拍計に対応と徐々にANT+対応を進めてまいりましたが、ようやく今回のバージョンVer.6.5.0で3・4種類目のケイデンス、スピードセンサーに対応しました。手元にあるセンサーはこれで全部対応しました。車椅子向けにちゃんと使えるかどうかはユーザさんからの声が聞けていないのでわかりません。是非車椅子ユーザさんからのご意見を聞きたいです。 ◆対応済みANT+センサー  ・フットポッド  ・心拍計  ・Bikeケイデンスセンサー  ・Bikeスピードセンサー  実は今回対応したセンサーからデータが取れること自体は5月の時点で確認済みでしたが、常に行き当たりばったりで開発の進むSmartTrainingの機能にハマり込むように機能拡張するために周辺機能の改造に手間取りました。  以前のSmartTrainingは、GPSからの位置情報がない限り、リアルタイム系のデータ(例えば速度や心拍数など)は記録できないような作りになっていましたが、今回からセンサーから取れる情報は位置情報とは切り離して記録するようにしました。心拍数やケイデンスも同様に記録するようになっています。  また、「ストローク」を廃止しました。元々、これはトレーニングタイプ水泳を選択した際に水をかいた回数を加速度センサーでカウントしようとしたものでした。これまで利用していた方がいらっしゃったかどうかはわかりませんが、ご不満があれば連絡ください。復活させるかどうか考えます。  あとANT+的には体重計とBikeパワーセンサーに対応できるかもしれませんが、センサー機材を入手するのが費用的に困難なので、対応は難しいかもしれません。ただ、ご協力いただける方がいらっしゃれば対応できるかもしれません。特にBikeパワーセンサーについてはどなたかご協力いただけると助かります。  まぁ、いずれにしてもこれで約2年前に初期バージョンをリリースした当時から頭の中にあったデータの種類的にはほぼ全て対応し終えました。次は本格的にクラウド対応しようと思います。この対応が完了すると、データのソースがクラウド上に移行できるようになるので、端末を変えてもデータが引き継がれます。バックアップ機能の替わりにもなります

オープンコーラ事始め

イメージ
@LuckOfWiseさんが開催されていた オープンコーラ が楽しそうだったので、いろいろと調べていたら材料が高い高い。全部揃えると送料込みで2万円なんだとか。 などとTwitterに投げていたら@LuckOfWiseさんから材料譲りますよ、とのありがたいお言葉が。 じゃ、遠慮なく、ということで送って頂きました。 ※オープンコーラについて詳しくは ググレカス 。 必要な材料はだいたい揃っているようです。 しかも、ご丁寧にスポイトまで厳重に包装していただいてます。全てのオイルは丁寧に個包装されており、きっと、大変だっただろう、と思われます。 というわけで、まずは箱を空けて今回はおしまい。 ちなみに、会社に着払いで送って頂いたら、勝手に会社のほうで送料を立て替えておいてくれたらしく、このままほっとこうかと密かに考えているわけはないです。

Mixi Voiceに対応してみました

Facebookに別れを告げた から、というわけではありませんが、MixiがAndroid向けにSDKを公開していたのでやっつけ仕事でSmartTrainingで対応してみました。 細かい話は Mixi Developer を見てください。必要な手続き、サンプル、SDKダウンロード等すべてが揃ってるので敢えてここでやり方を各必要もなかろうと思います。 んで、このAPIを使ってみての所感というか。 ・異常系の処理 例えば、投稿時に通信が利用できないケースでは、Mixiライブラリ側がcatchしてエラーメッセージ出してAPP側にthrowしてくれません。throwしてくれないのは、ちゃんとonFatal()あたりでコールバックしてくれるのでいいんですが、エラーメッセージがアプリ側とテーマが異なったり、メッセージ内容を変更したいといったことに対応できません。ライブラリなんだからUIの領域に踏み込んでほしくないなぁ。 ・onActivityResult()実装の必要性 Facebook SDKも同じですが、Mixiへのアクセス(具体的には認証処理)時に結果を受け取るためにonActivityResult()を実装する必要があります。つまり、Activityから要求を送信することが前提となっています。例えば、Serviceが直接Mixiにアクセスしたい場合もあるわけですが、そういうケースへの配慮がありません。 そんなときは、Mixi送信用のActivityを作って画面表示とともに送信→送信完了もしくは何か異常が起きたら画面終了します。Activityは背景を透明にしておくと見た目上Activityが起動されたことがわからないのでいいカモ。 ・Mixi Developerに登録できるアプリアイコン サイズ76x76というAndroid標準ではあまり聞いたことのないサイズ。48x48とか72x72あたりにしてほしいな。まぁ、そんなことはいいんだけど、GIFかJPEGしか登録できない。いや、PNGでしょ。イマドキさ。。。 ・アカウントの登録 昔からなんだけど、Mixiはキャリアメールを持っていないとアカウントが作れない。当然、Developer登録もできない。なんでよ?Android向けのSDK提供してるならGmailくらい認めてよ。それでサポ

さようならFacebook

イメージ
以前、SmartTrainingからFacebookのウォールに投稿する機能に関して 書きました 。 面倒、面倒と文句を言いつつもちゃんと投稿することができて「 Facebookに対応してよかったこと 」などというフォローの投稿も書きました。 しかし、今こう思っています。「さようならFacebook」 理由: 2011/7/12をもってアプリ側が生成した文字列をウォール投稿用のテキストボックスに自動設定することを不可にしたから。 情報ソース [何か書く...]の下のEditTextにアプリから文字列を設定できなくなった。 文字はめんどくさがらずに全部手で入力しろ、だってさ!バカじゃねぇの?どうしてそんなに閉鎖的なのよ?何のためにデベロッパにハッシュキー登録だの面倒な手続きでアプリ登録させてアプリの認証をやってるのよ?Facebookへのアプリからのアクセスを信頼するためじゃないの?何がTwitterやFourSquareと並んで新しいタイプのIT企業だ。ただ閉鎖的なだけじゃないか。こういう意味ではGoogleの「何でもオールオッケー!でも後で問題があったら消すからね」的なスタンスの方が付き合いやすくて周囲に様々な可能性を提供してくれているんだなぁ、と思います(まぁ、いろいろ批判はあるみたいだけど)。それにしてもFacebook、ユーザーが何億いるか知らないけど小さい!本当に小さいね! もういいよ、さようならFacebook!

ハニコム対応戦略 〜その3〜 やったことざざっと

前回はどんな感じでPhone向けのアプリををTablet向けにした際に割り当てていったかを書きました。 今回はもう少し細かく具体的に何やったかをまとめます。 重ねて言いますが、 Google I/O 2011公式アプリ がベストプラクティスなのでそちらを参照して真似るのが一番良いと思います。あと、 ここ とか ここ 見たらちゃんとやるべき事の詳細は書かれています。 なので、このページで書いてあることは、ひとつのPhone向けアプリをTablet向けにする際の一例だと思っていただければと思います。 1.テーマHoloの使用  TableでActionBarを利用したければ、ActivityのテーマをHolo系にする必要があります。   みたいな感じ。 2.ActionBarとMenuとTitleBar  ActionBarは普通にMenuを利用していればそのまま画面右上に表示されます。自分の場合、Phone向けのUIではあまり頻繁に操作することのない機能をMenuに入れることが多かったのですが、ハニコムでHoloテーマを使用した場合、ActionBar右側にこのMenuが出てくるので、それでいいのか考えましょう。  Phone前提の画面レイアウトでは、頻繁に利用するボタンを画面下部に配置することが多かったのですが、Tabletの場合にこれが適切か否かを検討しましょう。必要があれば、ActionBarにいれてしまいましょう。 3.リソース  ちゃんとdp、sp指定して画面レイアウトを構成してあれば、基本的にリソースはいじる必要はないはずです。  ただ、Tabletでは画面サイズが大きくなるので、大きなサイズで綺麗に表示したい場合はそれ相応の画像リソースを用意する必要があります。 4.android-support-v4.jarのインポート  ハニコム以前の環境でFragmentをサポートするためにandroid-support-v4.jarをインポートする必要があります。  android.app.Fragmentをimportする代わりにandroid.support.v4.app.Fragmentを#importします。  Fragment周りで主に利用するクラス。  android.support.v4.app.Fragment  android.su

ハニコム対応戦略 〜その2〜 Tablet対応する際の機能マッピング戦略

イメージ
前回はハニコム対応したアプリケーションの基本機能を紹介しました。 今回はTablet対応した際にPhone上で実現していた機能をどういう風にTablet上で表現するかを説明していきます。 まずは実際に対応を完了したアプリの画面を見ながら結果的にどうなったのかを説明していきます。 ◆Tablet用画面 ・画面を左右2分割して左側にサムネイル用のGridView、右側に選択した画像の高解像度表示を行います。 ・画面上部にはActionBarを配置して、左上にはアプリケーションロゴと名称。右上には各機能呼び出し用のボタンを表示します。 ・画面下部にはサムネイルの切り替え(ランキング/お気に入り)ボタンと、全ユーザのお気に入り登録回数とお気に入り登録ボタン(☆)を表示します。 ・画面右下にリング型のProgressBarを配置して、サムネイル更新中または高解像度画像ダウンロード中はProgressBarを表示します。 フレーム表示だとこんな感じ ◆Phone用画面 基本的には対応前と変わりませんが、以下の点が変わります。 ・タイトルバーの代わりに、ActionBarっぽい感じで独自レイアウトのバーを画面上部に表示します。 ・詳細画面でアプリロゴを選択するとホーム画面(サムネイル画面)に戻ります。 サムネイル画面 サムネイル画面フレーム 詳細画面 詳細画面フレーム ☆基本戦略 ◆Tablet画面 ・サムネイル画面と画像表示画面をひとつの画面に固めることで画面遷移をなくす。 ・画面下部に配置していたボタンのうち、よく操作するものをActionBar内に配置する。 ◆Phone画面 ・Tablet画面と画面デザインを合わせるため、タイトルバーに相当するバーの高さをTabletのActionBarと同じ高さにする。 ・その他よく使用するボタン配置は使い勝手を優先して位置を変更しない。 だいたい以上のような感じになります。 次回はもう少し具体的に実装面で考慮すべき点をまとめようと思います。

ハニコム対応戦略 〜その1〜 今回対応するアプリ

イメージ
画像閲覧アプリBeautyAlbumをハニコムTablet対応してみました。 今回から数回に渡って、Phone向けのアプリをPhone対応を残しつつハニコムTablet対応する手順と気にしなくてはいけない点をまとめてみます。 結論から言うと、 Google I/O 2011公式アプリ がベストプラクティスなのでそちらを参照して真似るのが一番良いと思います。 なので、あまり細かい実装の話はしません。 さらに、 ここ とか ここ 見たほうが良いと思います。 この場では、「私のアプリの場合こうしました」という具体例を示します。 また、絶対こうしなきゃいけないわけではありませんので、ご自分のアプリの性格をよく考え、どういう対応をするのか(またはしないのか)を考えてくださいね。 というわけで、まずは対応する前の元のアプリの機能を簡単に紹介します。 アプリはAndroid Marketから ダウンロード できます。 サムネイル表示画面で画像を選択すると画像が拡大表示され、その画像をお気に入りに登録したり、他のアプリに共有したりすることができるといういたってシンプルなものです。 【サムネイル画面】 ・ネットワーク上から画像のサムネイルをダウンロードしてGridViewに表示します。 ・サムネイルダウンロード中は画面右上のタイトルバー上にリング型のProgressBarを表示します。 ・画面下部に他のユーザのランキング表示と自分のお気に入り表示の切り替えボタンを配置してあります。 ・Menuキーを押すことでAboutダイアログを表示します。 【詳細画面】 ・サムネイルを選択すると画面遷移して高解像度の画像をダウンロードして表示します。 ・画像のダウンロード中はサムネイル画面同様タイトルバー上にリング型のProgressBarを表示します。 ・画面下部に他のユーザがお気に入り登録した回数と自分のお気に入りマーク(☆)を配置してあります。 ・画面下部に画像の共有、ギャラリーアプリ起動、リスト上で次の画像、前の画像を表示する機能を呼び出すボタンが配置してあります。 ◆UIの基本方針 次の方針でPhone向け画面設計を行っています。 ・よく使用する機能は画面上にボタンを配置して呼び出すようにする。 ・画面上のボタンは押下しやすいように画面下部に固めて表示する。 ・Menuキー

Mario with Widget

イメージ
I have created mario with widget. * How do I create it? - Download MuskedWidget from Android Market. - Change Home application to Launcher Pro. - Change Home screen numbers to 6. - Change Home screen row and columns to 10x10. - Arrange the widget. I need 16x16 tiles on Home screen. If it is 16x16, I can create a character on 1 screen!! See detail .

ウィジェットでマリオ

イメージ
Android Bazaar and Conference 2011 Summer 「頑張れ日本、頑張れAndroid」ということでウィジェットでマリオ作ってみました。 ☆作り方 ・Android Market から MuskedWidget をダウンロードする。 ・ホーム画面上にひたすら色指定したウィジェットを並べる。 いじょ。 ☆なんだそりゃ 意味分かんない人向け。 MuskedWidgetはホーム画面上にただの四角いウィジェットを生成するアプリです。 普通はこんな感じ。 色指定できるので、好きなところに好きな色のウィジェットを置いていきます。 普通のAndroidのホーム画面だと4x4しかウィジェットを置くことができませんね。 これじゃ、つまらない。 というわけで、かの有名なLauncher Proの登場。 このホーム画面は、10x10までウィジェットを置ける。 でも、マリオつくろうと思ったら、最低12x14はドットが必要。 足りん。 でもまだあきらめない。 Launcher Proは最大7画面まで拡張できて、ホームキーを押すと、各画面がサムネイル化される。 これだ。 6画面でサムネイル化したら、都合20x30までドットが取れるではないか。 というわけでできたのがこれ。 各ホーム画面の詳細はこちら。 さすがに夜中に600個ウィジェット並べる作業は疲れたよ。 っていうか、Launcher Proのフォーラムに最低16x16は欲しい、とか投稿しとこうかな。 あ、Launcher Proの設定でAuto-fit ItemsをONにしとくとわりと綺麗に敷き詰められるよ!

(Gallery起動的に)ハニコム対応したよw みたいな

Honeycomb端末手に入れました。 自分のアプリからGalleryアプリを起動しようとしたら異常終了してたので対応したよ。 FragmentだのActionBarだのはまだまだこの後。 っていうか、何とかしてくれ、このバージョン依存コードw この手がダメならあの手であの手がダメならこっちから攻めてそれでもダメならHTCだろ--!!!みたいな。 // ギャラリー表示 Intent intent = null; try { // for Hanycomb intent = new Intent(); intent.setClassName("com.android.gallery3d", "com.android.gallery3d.app.Gallery"); startActivity(intent); return; } catch(Exception e) { try { // for Recent device intent = new Intent(); intent.setClassName("com.cooliris.media", "com.cooliris.media.Gallery"); startActivity(intent); } catch(ActivityNotFoundException e1) { try { // for Other device except HTC intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("content://media/external/images/media")); startActivity(intent); } catch (ActivityNotFoundException e2) {

デ部9資料

デ部9でANT+について話しました。 資料 です。

MacでAndroid実機が認識されない(EasyTetherが原因)

Mac歴6ヶ月。 MacでAndroidアプリ開発しようと思って使い始めたのに、どういうわけかDDMSが実機を認識してくれない。 原因がわかったのでメモメモ。 ◆原因 EasyTether ◆解決策 KLink に切り替える。 一度、EasyTetherを使ってしまったMacは以下の手順で設定ファイルを削除する必要があります。 詳しくはKlinkの「 Set up your Computer 」参照。 > rm /System/Library/Extensions/EasyTetherUSBEthernet.kext > reboot ◆お断り 本記事は、Androidでテザリング機能が標準搭載されない時代の話です。 まもなくWiFiテザリングが標準搭載される機種が大量に発売されるはずです。 そんな端末を持っていればここでの話でハマる必要もないでしょう。 ◆詳細 開発者はEasyTetherを使うな EasyTetherはとても良くできたアプリだと思います。 Android側でUSBをEnableしておいて接続するだけでネットワーク接続されます。 普通にMacでUSBテザリングするにはベストチョイスかと思います。 でも、Macを使う上ではEasyTetherはUSB接続されたタイミングで、 ネットワーク設定を強制的に書き換えてしまうため、 DDMSで認識されなくなってしまいます。 そんなわけでKlinkを使うことにしました。 おしまい。

ANT+ なセンサーに対応してみました

ここしばらくANT/ANT+について調べていましたが、ようやくSmartTrainingにANT/ANT+対応機能を乗せてみました。 とりあえずできるのは Foot Pod で計測した歩数および距離データをスマトレ側で扱えるようにしたこと。 スマトレの万歩計の精度が悪いとお嘆きのアナタ!本物のセンサーのデータが利用できるようになりましたよ! っていうか、事実上Xperia arcはスリープ中に万歩計が動かないので、Foot Podを利用すれば大丈夫!みたいな感じです。 自分の理解では、 ・ANTは近距離無線の規格。 ・ANT+ではプロファイルを定義して一定の種類のセンサーのデータの受け渡しフォーマットを規定。 です。 ANTなセンサーからデータを受け取るには、 ・ ANT対応のAndroid が必要。 ・ANT Radio Serviceのインストールが必要(Marketで見つかるよ) ・ANT API for Androidを扱うアプリケーションを作る。  ANTセンサーから取得したデータはANT+の仕様に則ってパースする必要がある。  仕様は This is antサイト にDeveloper登録することで入手できる。 ってな感じです。 ANT+の仕様はオープンなので仕様書を読めばパースの方法はわかるのですが面倒(オイオイ)。 そんな時は、Wahoo Fitnessが提供する「 Wahoo Fitness API 」を利用することでパース処理を書かなくてもデータが取得できるようになります。 つっても、デバイスをほぼ直接制御するので接続、切断なんかの概念を理解するのにはやっぱり基本がわかってないと辛い。Wahoo Fitness APIはWahooの中の人にメールしたらくれました。ただし、「Garminのセンサーで動くよ!」って宣伝しないといけないという制約が付いてきちゃいますが。 Garmin以外のセンサーについては、試してないので利用できるかは知りません。 でもANT+はプロファイル含め規定されているので大丈夫なんじゃないかな!たぶん。 あと、ANTなセンサーは電波を発する機械ですので日本国内では 総務省が認可したデバイス じゃないといけないらしいです。技適マークってのがついてるヤツ。 Xperia mini x10なんてのも見たけど技適マークない

IS03とDesire比較(IS03リベンジ編)

IF03とDesire比較 で、Eclair時代のIS03の性能を評価していましたが、この度、IS03がFroyoにバージョンアップしたので、もう一度ベンチマークやってみました。例によって、ザクっと触っただけだから深刻に受け止めないでね。 結果は以下。 ◆結果 I:IS03(Eclair) D:Desire If:IS03(Froyo) を意味する。 1.定量的比較  ◇結果   ※数値がデカイ方が速い。   ・Linpack(Mflops)    I:6.01    D:38.5    If:37.33   ・Composite    I:7.06    D:48.7    If:47.71   ・Fast Fourie Transform    I:4.97    D:30.5    If:30.36   ・Jacobi Successive Over-relaxation    I:13.3    D:107.8    If:103.69   ・Monte Carlo integration    I:1.53    D:8.43    If:8.04   ・Sparse matrix multiply    I:6.84    D:38.1    If:38.08   ・dense LU matrix factorization    I:8.67    D:58.7    If:58.39   ・Draw canvas    I:27.0    D:60.6    If:28.80   ・Draw Circle    I:29.0    D:58.3    If:29.84   ・Draw Cube    I:27.3    D:46.3    If:28.45   ・OpenGL Blending    I:28.3    D:47.6    If:29.38   ・OpenGL Fog    I:28.5    D:47.5    If:29.41   ・Flying Teapot    I:28.9    D:19.3    If:19.05 2.定量的比較 面倒なのでざっくり感触だけ。 んー、なんか少しレスポンスは良くなったかな? でも、Desireほどじゃない気はする。 ◆まとめ 演算系(DrawXX,OpenGLXX以外)はDesire

Google Apps Device Policyはじめました(冷やし中華風に)

イメージ
企業ユースではイマイチセキュリティ面で弱い、とされているAndroid。(ここでいう「セキュリティ」とは端末紛失時のデータ漏洩への対策という意味ね。ウイルス対策とかの話はここでは無関係) そんなAndroidのセキュリティ強化ソリューションの一つであるGoogle Apps Device Policy試してみました。 詳しくは こちら 。 以上! とかいうのはアレなので実際に使うまでに必要なことと出来ることをまとめてみます。 ■必要な準備 ☆管理者がすべき準備 ・ドメインの管理権限を持っている必要がある。 ・ドメイン内DNSにCNAMEレコードを追加できる、または、ドメイン内のWebサーバにコンテンツを追加することができる。 ・ Google Apps に自ドメインを登録して利用開始する必要がある。ドメイン登録の際、ドメイン管理権限を持っていることを証明するため、上記CNAMEレコードの追加またはWebサーバにコンテンツを追加することを求められる。 ・Google AppsのEditionをBusinessまたはEducationにアップグレードする必要がある。Businessにアップグレードするためには、年間1アカウントあたり50ドルかかる。 ・Editionアップグレード時にクレジットカードの入力を求められる。(1ヶ月間の評価期間中は請求されない。それまでキャンセル可能。) ・モバイルサービスの設定で端末の設定を行う必要がある。  端末の設定はいわゆるセキュリティポリシーの設定です。詳しくは「できること」参照。 ・Google Appsに各ユーザーのアカウントを登録する必要がある。 ☆各ユーザーがすべき準備 ・管理者が登録したアカウントでGoogleに一度ログインする。 ・Android2.2以上を持っている必要がある。 ・Android端末にGoogle Apps Device Policyというアプリをインストールする必要がある。Android Marketからダウンロード可能。 ・Google Appsに登録したアカウントをGoogle Apps Device Policy設定時に選ぶ。 ■なにが起こるか ・端末がGoogle Syncすることで、管理者が設定したセキュリティポリシーが端末に強制適用されます。 ■できること セキュリティポリシーの

翻訳リソースキター!

イメージ
ちょっと前にSmartTrainingに libandrotranslation を組み込んで、英語、日本語以外もまともに対応していこう、と思っていました。 libandrotranslationについて詳しくは こちら 。 誰からも何も来なかったらそれはそれでネタにしようと思っていましたが、ついに対応から1ヶ月?ようやく初めての翻訳リソースが来ました! 来た言語_国は、「pt_BR」。。。何それ、、、初めて見た。 調べてみたらそれは、ptはポルトガル語、BRはたぶんブラジルじゃない? ブラジルといえば これ っていうか、遠すぎてよくわかんない、アツい、サッカー、鉄鉱石、くらいしか。 でもGraças, Graças。開始ボタンだけポルトガル語らしい。 SmartTrainingはジーコを応援しています。

Xperia Arcで画面レイアウトが崩れる時ー!崩れる時ー!(いつもここから風に)

Xperia Arc上でSmartTrainingを起動すると画面が崩れるという問い合わせがあったので対応してみました。 実機を持っていないので、強力な協力者(ええ、ダジャレですがなにか)にも支援いただきました。感謝。 ■原因 AndroidManifest.xmlの記述がanyDensity=falseになっていた。 ■対応 AndroidManifest.xmlの記述をanyDensity=trueに変更した。いじょ。 ■副作用 MapView上のOverlayItemのサイズが解像度に依存してしまう。 →dimens.xmlでdp指定したサイズを読み込んで描画することで対応。 ■経緯 詳しくは協力者のるるるさんの ブログ 参照。 Twitterで呼びかけたところ、るるるさんにご協力いただくことになりました。何度も何度もインストールとキャプチャ繰り返していただき本当にありがとうございました。 開発者視点で書くと、 ・ヒアリングした状況  ・画面レイアウトが崩れる。  ・トップ画面だけ崩れる(他画面もほぼ同じ作りなのに)。  ・一度崩れた画面でも画面遷移で戻ると直る。 ・試したこと  ・一部の文字のサイズ指定がdpになっていたので、sp指定に変更。   →変化なし。  ・SingleLine=trueのオプションを追加   →ボタン文字列が2行に渡ることは無くなった。でも字がデカイまま。  ・文字のサイズ指定そのものを小さくするように変更。   →確かに小さくはなったが、許せん。  ・「Xperia Arc 画面 崩れ」でググると、Spare PartsのCompatibility ModeをOFFにすると直るとの情報。   → 画面の表示のズレを解消するアプリ「Spare Parts」   →現象が発生しなくなることを確認。ってことはアプリ側の設定が古いバージョン向けになってるのね。というところにたどり着きました。 元々、SmartTrainingのAndroidManifest.xmlはこうなっていました。 <uses-sdk android:minSdkVersion="3" /> <supports-screens android:smallScreens="true" andr

BeautyAlbum 1.0リリースしました

イメージ
BeautyAlbum というAndroid向けアプリを作ってリリースしました。 ただ、美人が見れるだけのアプリです。 機能的な話は置いといて、システム構成はこんな感じ。 今回はホットペッパーBeautyの ヘアサロンAPI を利用してみました。 スタイルサーチAPI という好みの美人さんがダイレクトに検索できる(ちょっと誤解されそうだけど)非公開APIも存在するらしいのですが、利用許可がもらえなかったのでやむなし。 アプリ内で画像をお気に入りに登録すると、お気に入りに登録された回数がAWSのSimpleDBに記録されます。 この回数でソートしてアプリ側で表示するとワールドワイド美人さんランキングが表示されます。 特徴としては、サーバ側処理は1行も書いていません。 Androidアプリ側のクエリだけで頑張っています。 スタイルサーチAPIを使うと、美人さん画像を髪のボリュームやら顔の形やらで検索できるのでベストフィットなAPIだったのですが、使えません。 代わりに利用したヘアサロンAPIは、基本的にお店を検索するAPIなので、美人さんだけでなく、美人さんの後ろ姿や店内の様子、シャンプーの写真、男性の写真等々余計なもの(すみません)が混ざっています。 顔認識APIでこういった余計な画像を取り除くこともできるはずですが、残念なことにサムネイル用の画像は小さすぎて顔認識が正常に機能せず。大きな画像だと正常に機能するんだけどね。 今後要検討ですな。 ちなみに、当たり前ですがエロは無しです。 そんなモノはリリースしないので期待しないでください。 にしても、デバッグが楽しかった。。。 アイコンが黒ラベルみたいなのは狙っています。 BeautyAlbumは黒ラベルを応援しています。

LiveViewの(たぶん)不具合の直し方

SmartTrainingも対応しているソニエリの LiveView のファームウェアをアップデートすることで以下の不具合が直ったことを確認しました。 ・SandBoxタイプのプラグイン起動時に画面がOFFにならない。  →電池ガンガン喰っちゃいます。 ・ServiceからBitmap送ってもLiveView側の画面が更新されないことがある。  →SmartTrainingの場合、何故かトレーニングの開始時にこの問題が発生して何時まで経っても画面が更新されていませんでした。下キーとかを押すと何故か更新が反映されていました。 めでたし、めでたし。 ファームウェアのアップデートは、ソニエリが提供している Update Service というPCアプリ経由で行います。 発売当初は期待の高さと裏腹に安定性の無さで色々と叩かれていたみたいだけど、これでだいぶ使えるようになったかもね。 自分のLiveViewは使われる機会はほぼ無く、常にバッテリ干上がってるけどw リストバンドしたら充電できないって時点で残念すぎる。

ANTPlusDemoをXperia miniで動かしてみるぜ

イメージ
昨日、ANT API for Androidを読んでいて、なんとなく意味はわかったつもりになったので、ANTPlusDemoを動かしてみた。 ◇用意するもの  ・Xperia mini 1個   (幸いなことに、たまたま横に落ちていた)  ・Windows PC(Android開発環境あり) 1個  ・Micoro USBケーブル 1本 ◇Xperia miniのアップデート ソニエリの電話機は、Update ServiceというPCアプリからアップデートをかけることができる。 Xperia miniを最新版にアップデートしてANTが使える環境にしよう。 http://www.sonyericsson.com/cws/support/softwaredownloads/detailed/updateservice/1.726241/xperiax10mini?cc=gb&lc=en ※miniのFirmwareバージョンが「2.1.1.0.6.A」(か、それ以上)であることが大事らしい。 ※しかし、どういうわけか、miniをアップデートしてみたのだが、後の手順でANT Radio ServiceがMarketで見つからない。ダメもとでminiのアップデートをもう一回やってみたらどういうわけか、ANT Radio Serviceが見つかるようになった! ◇ANT Android APIの入手 ANT Android API のフォームから入手しよう。一番下の[this form]ね。 ◇ANTPlusDemoを実行 メールがくるので、これでANT Android APIを入手しよう。 この中に含まれる「Android_AntPlusDemo_1-0-2_src.zip」を解凍してEclipseにインポート&Xperia miniをPCに接続して実行してできあがり! ま、ANT対応したセンサーがないのでこれ以上は何もできないけど。 ・ANT+ Demoをインストール ・ANT+ Demo実行すると自動的にANT Radio Serviceのインストールを求められる ・ANT Radio Serviceが見つかったのでインストール ・動いた!でもANTセンサーないんだぜ。 ・なんかいろいろ設定あるよ おしまい。

ANT API for Android ドキュメント超訳

ANT API for Android に含まれる「Creating ANT+ Android Applications」を訳してみました。 いつも(翻訳公開するのは初めてだけど)ながら適当な訳なので、正確を期すためには原文を(それじゃ意味ないか?)読んでくださいね。 「Creating ANT+ Android Applications」 1パッケージコンテンツ ・AntLib  アプリケーションへのInclude用。APIはAntInterfaceで定義されている。AntDefineとAntMesgはANT通信に必要な定数を提供する。 ・AntPlusDemo  ANT通信を使った脈拍計、歩数計、体重計からのデータをパースするEclipse用のリファレンスアプリケーション。ANTLibの使い方を示す。また、ANT I/Fの適切な扱い方と、ANT Radio Serviceがインストールされていない状況をハンドリングする。ペアリングされたデバイスは再びペアリングされるまで記憶され、デバイスサーチとイベントバッファリングができる。 2必要環境  ANTハードウェアによる全ての通信は'ANT Radio Service'を通して実現される。このサービスはアプリケーション~システム間のProxyとして機能する。このサービスは、ANT対応したデバイスからAndroid Marketを通じて利用可能である(または、デバイスにプリインストールされている)。その他のデバイスについては、ANT機能はハードウェアメーカーからのアップデートによる対応が必要となる可能性がある。ANT Radio ServiceはANT機能が有効になった端末にしかインストールできない。 ANTLibはANTチップをアプリケーションから制御するAPIを提供する。これはコマンドメッセージのセットによって実現される。ANTを制御するメッセージについては、「ANT Message Protocol and Usage」を参照のこと。Developer's Zone(http://thisisant.com)※ http://thisisant.com/images/Resources/PDF/1204662412_ant%20message%20protocol%20and

スリープ中に加速度変化イベントが取れない端末まとめてみました

SmartTrainingのFAQにスリープ中に加速度イベントの上がらないAndroid端末をまとめてみました。 「Q. 「残念なお知らせ」とはなんですか?」の部分。 SmartTrainingのFAQ OSのバージョンアップで問題が改善されたのはNexus One唯一(Eclair→Froyo)。 Nexus Oneの問題がFroyoで改善されたことにより Issue 3708 は「Closed」になった。 その後、他の端末で解消されていないので、 Issue 11028 が立ち上がった。 Galaxy Sは日本版と海外版で動作が違う。 メーカーによってもイケてるのイケてないのが混在。(当然、加速度イベントが上がるのイケてる) 混沌としてますな。 頑張れ!偉い人!

HoneycombエミュレータをHVGAで起動してみた

イメージ
Honeycombエミュレータは超重いことで定評(?)がありますが、「そりゃ、デフォルトの解像度がWXGAだからじゃないの?」と思い、基本のきのHVGAサイズでavdを作って起動してみました。 ◇ホーム画面 あれ、、、なんだよ、黒+青ベースの男子ウケしそうなUIはどこいったんだよぉ~。ステータスバーがグレーに戻ってるじょ。 ↓Honeycomb   ↓Gingerbread ◇メニュー画面 ほぼ違いが見当たらない。 ↓Honeycomb ↓Gingerbread ◇設定画面 ちょっとだけHoneycomb風味が出てる? ↓Honeycomb ↓Gingerbread ◇ロック画面 時刻のフォントだけ微妙にHoneycomb風。 ↓Honeycomb ↓Gingerbread ◇ダイアログ だいぶ雰囲気出てきた! ↓Honeycomb ↓Gingerbread ◇で、重いの? んー、自分のアプリをデバッグする分にはそれほど極端に重いとは思わないな。 定量的に結果示せないのがアレだけど、特に今までと比べて不満はないです。 ◇その他 設定画面を開くのはいいけど、その先のWireless settingsとか先の画面が表示されない。。。 ◇まとめ 今後、Honeycombベースのスマートフォンが出てきても、「あれ、GingerbreadとUIは変わんねーじゃん!」とかいうショックへの耐性はついた。

LibAndroTranslationに対応してみました

イメージ
英語、日本語、あと一応中国語に対応しているSmartTraining。 ありがたいことに、これまでもいろいろな言語に翻訳しない?というお誘いを頂いてきました。 が、SmartTrainingはほぼ毎週のようにバージョンアップしてしまいます(たぶん病気です)。 外部の企業さまなどに翻訳をお願いしてしまうと絶対このバージョンアップ速度に追いついてくれない。 というわけで、涙を飲んで多言語対応は諦めていました。 ここで救世主現る。 LibAndroTranslation さんです。 Androidアプリの翻訳を一般のユーザにも手伝ってもらいやすくするフレームワークを提供してくれます。 アプリ内のstringリソースをざっくり抜き出して翻訳結果を入力できるI/Fを用意して、翻訳結果をstringリソースファイルの形式で開発者にメール送信させる仕組みを持ったライブラリ。 本気で神ですよ、これ。 よくこんなエコシステムな発想が出てくるな、と思います。 メニューからLibAndroTranslationを呼び出せるようにしてみました。 (特に日本語と英語以外の言語でお使いの)皆様、是非翻訳お願いします。 自分が書いたヘッポコ英語リソースも修正頂けると嬉しいですw 翻訳者が現れなくてもそれはそれでネタになって楽しいけど、現れてくれたら嬉しいなぁ。 とても楽しみです。