MixiClientをver.0.2にアップデートしました


今回の変更点は、
- アイコンの変更
- コミュニティ(トピック)の内部ブラウザ化
- コメント機能(コミュニティのイベントを除く)
です。
コメントは各記事にてメニューボタンを押下し、「コメントを書く」を選択してください。


今回の変更点は、
です。
コメントは各記事にてメニューボタンを押下し、「コメントを書く」を選択してください。
●背景
ただいま、InstrumentationTestCaseでテストケースを書いているのですが、これをHudsonで定期実行しようとしています。
●問題
Hudsonからエミュレータを起動しようとしても、何故か起動に失敗します。
emulator: ERROR: unknown virtual device name: ‘android1.5′
emulator: could not find virtual device named ‘android1.5′
勿論、コマンドプロンプトから以下のコマンドを叩いた場合にはちゃんとエミュレータを起動できることは確認しています。
emulator @android1.5
※toolsフォルダはPathに通しています。
●原因
恐らくですが、以下のエントリと原因は同じかと思います。
androidのエミュレーターが起動しなくて大いにはまる
上記を参考にすると、WindowsのサービスであるHudsonからエミュレータを起動したため、サービスのホームディレクトリである
C:\Documents and Settings\LocalService
からしかAVDを読み込めないようです。
●対応方法
大きく二通り考えられると思います。
1.WindowsサービスのホームディレクトリにAVDを作成する
2.Hudsonを通常の管理者アカウントで起動しておく
●結果
対応の経緯は省略しますが、「1.」の方法はうまくいきませんでした。
従って、とりあえずは「2.」の方法でしのぎます。
●背景
ただ今 アプリケーションのの動作検証作業を少しでも自動化しようと、
InstrumentationTestCaseでテストを書いています。
●やりたいこと
ネットワークが切断された場合を想定したテストも自動化したいので、
コード上からエミュレータのネットワークを切ります。
●やり方
Intent intent = new Intent();
intent.setAction(“android.intent.action.DATA_CONNECTION_FAILED”);
intent.putExtra( “apn”, “epc.tmobile.com”);
sendBroadcast(intent);
これだけ。
恐らくAPNさえ変えれば、実機でも有効なはず。
●補足
上記は、SDKのソースに入ってる、
MobileDataStateTracker.startMonitoring()及び
MobileDataStateTracker.MobileDataStateReceiver
の中を見ると分かります。
が、テスト終了時に、ネットワークを復帰する方法が分かりませんw
Setting→Wireless Controls→Mobile networks
→Access Point Names→T-mobile US
をクリックすれば復帰しますが、これもできれば自動化したい・・・
●謝辞
android SDKのソースコードを取得してEclipseで開発する時に参照可能な状態に設定する
上記エントリが無ければ、上記のやり方を知ることができませんでした。 ありがとうございました。
こそこそと作っていたMixiClientを公開しました。
MixiClientはマイミクの新着日記、コメント、コミュニティが閲覧できるmixiビューアです。
まだまだ一部の機能しかないため、バージョンは0.11としています。
骨子ができたため公開したのですが、今後はバグ対応しながら、以下の機能を追加予定です。
バグ情報、機能要望など随時受け付けていますので、どしどしお知らせ下さい。
●問題
PendingIntentは以下のように登録しています。
Intent intent = new Intent( context, Test.class); defineIntent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK); defineIntent.putExtra( "title", event.getTitle()); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, intent, 0);
eventを引数としてこの処理を繰り返し呼び出した場合、渡したeventによって
Testアクティビティに渡るtitle値が変わってくれないと困ります。
しかし、上記のコードでは、title値は変わりません。
●解決
APIにはちゃんと書いてあるんですが、
getActivity(Context context, int requestCode, Intent intent, int flags)
getActivityメソッドの第4引数に渡すflagsが0だからまずいんです。
こいつに、
PendingIntent.FLAG_UPDATE_CURRENT
を渡してやれば、上記intentのtitle値(extra data)をちゃんと更新してくれます。
●反省
APIをろくに読んでない
Web上のコードをピーコしすぎ
以上
Androidの現在位置取得の頻度は、
LocationManager.requestLocationUpdates(…)
に渡す、minTime及びminDistanceで決まります。
minTimeで1時間と指定すると、基本的には1時間毎にしか現在位置を取得しないようです。
では、minDistanceを1Kmと指定すると、現在位置の取得頻度はどうなるんでしょう?
普通に考えれば、1Km移動したかどうかの判定のために、現在位置取得の頻度は多くなるはずです。
ですが、例えば加速度センサーなんかを使えば、携帯を机に置きっぱなしにしているかどうかが分かるため、わざわざ現在位置を取得する必要はない、という判断ができるはずです。
というわけで、実験してみました。
minTimeは0で、minDistanceに1Kmと指定し、一晩寝かせてみました。
結果、朝にはバッテリーは干上がり、目覚ましのアラームも鳴りませんでした。
以上。
表題の通りの問題ですが、長らく放置していました。
が、いい加減不便なので調べてみました。
結論から言うと、エミュレータのタイムゾーンをOSと合わせればOKみたい
参考:Can’t get multiple location updates
でも。。その理由までは分かりません。 そういうもの?