2012年10月28日日曜日

Sony Smart Wireless Headset pro購入

前機種のMW600のバッテリーがへたってきたので新機種のMW1を購入しました。



左がMW1で右がMW600

裏面。SONYロゴの部分がクリップになっている

表面。右側のmicroSDは付属品(4GB)です。

キャップを取るとmicroSDのスロットとmicroUSBがあります。
キャップは紐みたいなのが付いていて失くさないように工夫されています

側面から。左から順に先送り、再生・一時停止、逆送り、モード変換ボタン、最後にmicroUSB

もう片方の側面。音量調節ボタンがあります

microUSBケーブルで充電しながら音楽が聴けます

クリップを上げるとSony Ericssonの名残が見られますw

MW600と比べた使用感

曲を聞きながら充電できる

個人的に一番大きいのがこれ。MW600はUSBケーブルをつなぐと問答無用でスリープしてしまっていたがMW1はケーブルをつないでもスリープしないので曲を聞きながら充電可能。

ボタンの種類が増えた

モードの切り替えがやりやすい。MW600だと再生ボタン長押しの後にタッチ式のバーでモードを変更して一定時間待つ必要があったがMW1の場合、モード切り替えボタンを押して、逆送り、先送りボタンでモードを変更して再生ボタンで決定と分かりやすい。

あとMW600のタッチ式のバーは服や肌に触れただけで誤動作を起こす場合があったがMW1の場合はボタン式で感触も固くなっているので誤動作は少なくなった。

ボタンが増えてシンプルじゃなくなったがこれはMW600と比べてより多機能化(Smart)になったので仕方ないのかもしれない。次の機種では第6世代iPod nanoのようにボタンを減らしてタッチパネル化したらより魅力的な製品になるんじゃないかと思うんだけどどうなんでしょ?

幅広で薄くなった

幅広になったおかげでディスプレーの情報量が多くなり、ディスプレーの横にある応答ボタンが大きくなったおかげで押しやすくなった。MW600は爪の先で押さないといけないぐらい小さかったがこれのおかげで電話を取る動作や切る動作がやりやすくなった。
あと丸い棒状だったのが平面になったので安定感が増して持ちやすくなった。

Androidとの連携が強化

Google Playから公式アプリをインストールすると通話履歴、SMS、Gmailなどをディスプレーに表示するミニアプリが利用できる。ミニアプリは開発者が自由に作れるようになっている。

ファームウェアの更新が可能

Smartと銘打っているだけあってファームウェアの更新が可能。ファームウェアは前述の公式アプリ経由でアップデート可能なのでわざわざPCにケーブルをつなぐ必要はない。

単独で音楽再生が可能

microSDに音楽を入れて単独で音楽が聞けますが対応フォーマットがwavとmp3のみなので個人的に要らない機能。最低でもaacサポートが必要でしょ。ファームウェアで対応できないですかねぇ...
あとAndroid端末内の音楽をmicroSDにワイヤレスで同期できたら最高なんだけど

2012年10月13日土曜日

NEXUS 7でみちびき(QZSS)を捉えられるらしい

TLを見ていたら

ということなので手元のNEXUS 7で捉えられるか確認してみました。
GPS TestとGPS Essentialsというアプリで見ましたが両方とも01番の衛星として表示されました。スマホ(GALAXY NEXUS)でもやってみましたがこちらは01番の衛星は捉えられませんでした。

計測場所: 渋谷某所

NEXUS 7: 真ん中(天頂)付近に02番の衛星と重なる形で01番の衛星が見えます

GALAXY NEXUS: 天頂付近には02番の衛星しか表示されていません

01番の衛星がGPSなのかQZSSなのか判別が付きませんがGPSの方は同時刻では日本上空を飛んでいないのでQZSSで確定となりました。


あと、NEXUS 7はGALAXY NEXUSと比べてもGPSの感度が高いことも確認できました。

2012年10月9日火曜日

Rクラスを直接参照せずにリソースを取得する

たまにRクラスを参照せずにリソース(drawable, layout等)を取得したい場合があります。

今まではresource id(例: R.drawable.hogehoge)の値をリフレクションを使って取得するユーティリティーを作ってしのいでいたのですがそんな物を作らなくてもResources.getIdentifier(String, String, String)というそのまんまのメソッドがありました。

ActivityやService内でこんな感じで使えます

int resId = getResources().getIdentifier("hogehoge", "drawable", getPackageName());

2012年6月20日水曜日

AngularJSを使ってみた

味見部さんでAngularJSを勉強したので簡単なサンプルを作ってみました。



スケジュール(名前と日時)を入力してリストに名前と残り時間(秒)を表示する簡単なものです。

残り時間はsetInterval()で1000msごとにスケジュールをforEachで回して更新しています。
AngularJSならbindしているView部分が自動的に更新されるはず、と期待していたのですが外れました。

入力欄に何かタイプすると分かりますがUIへのイベントを契機にbindしているViewが更新されます。


2012年4月24日火曜日

AIR for iOSでAPNsをサポートするためのTips

【追記】AIR 3.4から正式にAPNsによるPush Notificationがサポートされました。この記事で紹介しているやり方だと恐らく不具合が生じる可能性がありますので標準のAPIを使うようにしてください。詳しくはプッシュ通知の使用を見てください。

AIRのアプリでAPNsをサポートする必要があったのでANEで実装してみました。
既に実装した人はいるようなのですが(参考)ソースがなかったので自作しました。

iOSアプリでAPNsを使うには大雑把に以下の実装が必要です。
  • UIApplicationのregisterForRemoteNotificationTypes:メソッドを呼び出す。端末をAPNsに登録します
  • AppDelegateに以下のメソッドを実装
    • application:didRegisterForRemoteNotificationsWithDeviceToken: APNsの登録に成功した場合の処理
    • application:didFailToRegisterForRemoteNotificationsWithError: APNsの登録に失敗した場合の処理
    • application:didFinishLaunchingWithOptions: Remote通知に含まれる情報を読み取ります(アプリ起動時)
    • application:didReceiveRemoteNotification: Remote通知に含まれる情報を読み取ります(アプリ起動中)


これをANEで実装する場合、いろいろ試して下のような形で実装できました。

UIApplicationのregisterForRemoteNotificationTypes: メソッドを呼び出す


普通にANEの関数内で呼び出します。UIApplicationのインスタンスは[UIApplication sharedApplication]で取れます。UIApplicationはSingletonのようです。

UIApplicationDelegateにPush関連のメソッドを実装


こいつが結構くせ者でしてAIRのRuntimeが既にDelegateを実装してしまっているのでむやみに取り替えられません。また、ソースもありません。

いろいろ調べた結果以下のような方法を採りました。
  • 適当なクラスのload()メソッド内でNSNotificationCenterを利用して起動時のイベントを監視するObserverを登録します. このObserverの引数(NSNotification)からapplication:didFinishLaunchingWithOptions:で渡される起動時の引数を取得できます。(参考)
  • APNs関連のメソッド3つについてはAIR Runtimeでは実装してないはずなので上のObserverの中でメソッドを丸ごとオレオレ実装の物にオーバーライドします(参考)。将来AIRでAPNsがサポートされたらおかしな事になるかもしれませんので注意してください。
AIR(Flash)もiOSも始めたばっかりで苦労しましたがいろいろ勉強になりました。

2012年3月30日金曜日

AIR for iOSのStageWebViewで画像の動的表示が出来ない件

AIR for iOS環境でCameraUIやCameraRollingで取った画像をローカルストレージ上に保存してそれをStageWebViewで表示させようとしても表示されない

AIRからStageWebView.loadUrlでJavaScriptを実行してDOMツリーにimgタグを追加したが表示されない。100ms後にsetTimeoutでimgのsrc属性に全く同じ値をあえて代入するようにするとなぜか表示される。

Android版では不要でiOS版の場合だけ必要な処理

TODO

  • Safariでの動作も調べてみる
  • UIWebViewでの動作も調べてみる



後日コードも交えてまとめる予定

2011年8月26日金曜日

AndroidのBackup Data APIについて調べてみた

どうやってどこにバックアップデータを保存しているのかソースから探してみた。 自分用のメモなので適当です。

検索対象



バックアップデータの転送路はIBackupTransportでインターフェース化されていてその実装は確認できた限りで2種類ある。

  1. LocalTransport : 文字通り端末のローカルファイルにバックアップする実装。 /cache/backup/(パッケージ名) 以下にバックアップする。 
  2. com.google.android.backup/.BackupTransportService : Android Backup Service用の実装っぽい。ソースコードは当然ないのでこれ以上追えなかった..