投稿

Galaxy Note

auのIS03からGalaxy NoteにMNP乗り換えしました。 5月末までのDの乗り換えキャンペーンに乗せられました。 最近IS03は全く使っていないので、月額費用が下がってXiの(もしかして)高速な通信がテザリングで使えたらいいか、ぐらいの目的です。 Galaxy Noteそのものについては、SPenでなんか作ろうかな、という目的もあったりしますが、今のところ特にネタはありません。とりあえず、テザリング向けに電池の容量がデカかったのがこの端末を選んだ理由です。 というわけで、端末自体にはそれほど興味なかったのですが、実際触ってみるとデカくて電車でさっと出してメール見る、とかの用途には使いにくい。Xperia Activeの方が圧倒的にフットワーク軽く使えます。 テーブルなんかがある落ち着いた場所で使うにはデカイので見やすいです。 ま、あたりまえですな。 そういえば、SmartWatch向けの画面が巨大化してしまう不具合を再現するのに役立ちました。

アンドロイド始めました2

前回、査定期限まで1週間、とか書きました。実は期限は過ぎましたが、まだ受験していません。 先週、受験チケットが届いて早速翌日受験するぜー、という勢いで予約サイト行ったら、1週間後からしか予約受付してくれませんでした。ガーン。あっさりと査定は終了しました。結局、合格でも不合格でも特に何の影響もない状況になってしまいました。 一応、明日5/31に受験予定です。 せっかくお金払って、勉強もしたので受験するつもりです。 先週、受験チケットが届いた時点ですっかりモチベーションは下がり切っていました。あれから、テキストは1回も開いていません。明日の受験までにテキストを開くかどうかはわかりません。(今のところ開くつもりはありません。) そんなことよりSmartTrainingの次期改造で頭がいっぱいです。

アンドロイド始めました1

イメージ
タイトル怪しいですが、Androidの 資格試験ACE を受けることにしました。 査定の条件でACE合格という目標を立てたためです。 目標を立てたのは2011/8。 査定期限は5/25。あと1週間しか無いことに昨日気づきました。 早速Amazonで資格教科書をポチったら届きました。 AndroidはDev Phone 1が発売された頃からなんだかんだで触っているので、わりと慣れているつもりです。何を今更資格取る必要あるのよ、という気持ちも正直ありますが、まぁ、査定のためなので仕方ありません。それがサラリーマンというものです。 そういうわけであまり、モチベーションは高くなかったのですが、ACE受けることをTwitterに投稿したらお薦め参考書情報をいただいたりしました。意外とそんなことでモチベーションはグーンと上がりました。頑張ります。 早速、1章から教科書を読み始めます。1章読み終えた時点で眠い。ちょっとヤバいなーと思っていたら、教科書の内容がちょっと変。 ListViewとSpinnerのイメージが間違ってないかい? なんか、楽しくなってきました。頑張ります。 その後も、 https://twitter.com/#!/awwa500/status/203483553718210561 とか、 https://twitter.com/#!/awwa500/status/203485216394854400 とか、ちょいちょい突っ込みたい内容が。 これまで、Androidに関して体系的に勉強したことはありませんでした。勉強してみると意外と知らないことはあるな、ということに気付きました。全くの無駄な行為というわけではなさそうです。 とりあえず、全14章のうち、初日で4章まで読破しました。 引き続き頑張ります。

SmartWatch MN2に対応してみました

SmartTrainingがVer7.1.0で SmartWatch MN2 に対応しました。 できることと画面イメージは 公式サイト を見て下さい。 LiveView対応と同じノリでサクッと2~3日で対応しようと思っていたら2週間以上もかかってしまいました。 その理由と今回特にこだわったところをまとめてみます。 まず、MN2は以下のような特徴があります。 ・直射日光下では画面がほとんど見えない。 ・操作はタッチパネルで行うしかない。 ・バイブレータが利用できる。 ・直射日光下で見えない画面 本当に見えません。困りました。適当に字を描画しても、とにかく見えません。周囲が暗ければ普通に見えますが、明るくなると極端に見えづらくなります。親機Xperiaの液晶は明るい直射日光下でも比較的見えやすい液晶なので非常に残念です。残念残念ばかり言ってても始まらないので、アプリケーション側でできる対策を考えます。というわけでハイコントラストをかなり意識しました。 ・字は白。 ・背景は黒。 ・アイコンデザインも変更して、他アイコンと判別したい『人の形』の部分を白(以前のアイコンは若干グレーのフィルタをかけてありました)にしました。ほんのちょっとのグレーでも極端に見えなくなります。白黒配色は一見殺風景ですが、そういった理由があります。ちなみに、背景を白、字を黒にしなかったのは、バッテリー消費を少しでも抑えるためです。(そうしろと、ガイドラインに書いてありました) ・タッチパネルで行うしかないI/F LiveViewには、端末右上にハードキーがありました。 ハードキーと左右キーとを組み合わせたUIとしていましたが、SmartWatchはタッチパネルのみ。 画面が小さい上にその小さい画面を指で触るとほとんど覆われて何も見えない状態になります。 ユーザの操作を認識したのかどうかがわかりにくい。これから気持よくランニングを開始しよう、とか、ランニングが終わって疲れてヘロヘロ~、という状態で操作できたのかどうかを見づらい画面を触って操作するなんて耐えられません。というわけでユーザに操作できたことをフィードバックすることにしました。 ・操作受付が可能な部分を触った瞬間、振動させることにしました。 ・特に重要な操作の場合、振動パターンを切り替える...

SyncAdapterのススメ

SyncAdapterの練習用にSmartTrainingにSyncAdapter機能を実装してみました。これを基にざっくりSyncAdapterについてまとめてみました。細かい実装方法は面倒なのでここでは載せませんので、以下のキーワードから自分で調べてください。(と、突き放す。) 宝くじでも当たって仕事しなくて良くなるくらい暇になったらもっと細かい実装方法についても書くかもしれません。 SyncAdapterの定義 SampleSyncAdapter のように、クラウド上のデータと端末上のデータを相互に連携するための一連の仕組みを指します。 SyncAdapterの概要 アプリケーション内データとクラウド上データの連携をサポートしてくれる仕組み。 端末のアカウント設定(AccountManager)と連動する。 API Level 5以上で利用可。 SyncAdapterがやってくれること Syncのトリガを提供してくれる。 Sync中にシステムSyncアイコンを表示してくれる。 SyncAdapterがやってくれないこと Sync処理(Syncロジック)そのもの 認証処理そのもの メリット アカウント管理を端末のアカウント設定と統合できる。 システムSyncアイコンが使える。 同期中の状態をユーザに通知するのにNotificationではちょっと主張が強すぎる。通知領域以外で、バックグラウンドでタスクが実行されていることを表現するのに適している。 Sync開始したときに通信不可状態だった場合、通信が復活したら自動的にsyncをしてくれる。 個人的にはこれがSyncAdapterを実装する最大のモチベーション。 一応、ネットワークの状態監視とキュー管理を自前で作れないことはないけど。 デメリット 実装しなければいけないことがわりと多い。一般的には以下の実装が必要。 SyncAdapter SyncService Authenticator DataProvider SyncServiceのXML定義 AuthenticatorのXML定義 Syncロジック 認証画面 SyncAdapterに必要な実装 SyncAdapter Sync動作のエントリポ...

SyncAdapterで同期時にSyncアイコンを表示したい。 出来ればすぐに。

SyncAdapterを実装してrequestSync()したときに、通知領域にSyncアイコンが表示される条件。 extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); してから、 ContentResolver.requestSync(mAccount, AUTHORITY, extras); とすればいい。  SYNC_EXTRAS_MANUALを使わないと、 authorityにCALLER_IS_SYNCADAPTER = trueが付加されててかつ、 ContentResolver経由でローカルのDBを更新している処理が一定時間以上かかると 適当なタイミングで表示される。 これだとリモートデータにアクセスしているときや、ローカルデータへのアクセス時間が短いときはSyncアイコンが表示されない。 リファレンスのどこにもこんな説明はないようだが。。。 ま、そんな感じ。

既存のアカウントタイプにサービスを追加する

イメージ
AndroidでSyncAdapterを作成する際、自前でアカウントを作成するには、 ここ に掲載されているようにAccount-authenticatorを設定すればOKです。こんな感じ。 "typeOfAuthenticator"の部分を自前のアカウントタイプに変更すればいいわけです。が、例えばGoogleのアカウントを利用したサービスを作りたい場合、自前のアカウントタイプにしてしまうと、AccountManagerやSyncAdapterを利用したときに端末に既存で設定してある認証情報を利用できなくなってしまいます。そんなときは、既存のアカウントタイプに自前のサービスだけ追加することでができます。ある意味寄生してるみたいですな。例えば、アカウントタイプcom.googleに寄生するときはこんな感じ。 合わせてsync-adapterのaccountTypeもcom.googleに変更してやります。 画面的にはこんな感じになります。 めでたくGoogleのアカウント設定内に自前のサービスを追加することが出来ました。