Robolectric3.4.2+Powermock1.7.3でのテスト (2017版)
今まで何度か検証してみましたが、情報が2013年度と古く今で実際使えるのが微妙だったので2017年度版としてチャラい調査をしてみました
今まで何度か検証してみましたが、情報が2013年度と古く今で実際使えるのが微妙だったので2017年度版としてチャラい調査をしてみました
Toolbarを使っている場合であれば、onCreateOptionsなんちゃらでメニューを作る以外でもSearchView等のActionViewを取得できるっぽい
Android Design Support Libraryで?追加されているTabLayoutを使った場合に、addTabをした直後にselectメソッドを呼んだりaddTabの第2引数でtrue(selected)にしてもそのタブにフォーカスは当たるけど自動アニメーションスクロールによる処理が行われない為に自分でそのタブが出てる所までスライドしないといけない問題が出てるのですが...
なんとか解決出来たっぽいのでメモ
例えばtwitter4jを使う所をテストしたい場合にやたらとAPIリクエスト投げられても困るなっていう事案が発生した場合に、twitter4jが投げるリクエストをローカルサーバーとかにぶん投げるようにしてテストしたいみたいなケースの場合の検証をしてみた
※環境はAndroid(Robolectric)
公式?: https://github.com/evant/gradle-retrolambda
参考: http://qiita.com/kamimoo/items/f4b3ef22ca0327e88e32
最近色んなデモアプリのソースとかを見ていると一部でJava8での記法みたいなので作られてる物もあるけど、AndroidってJava8サポートしてないよねっていう事で調べたらretrolambdaっていうのを使う事で出来るっぽい
参考1: 【翻訳】AsyncTask と AsyncTaskLoader を rx.Observable に置き換える - RxJava Android Patterns
参考2: http://stablekernel.com/blog/replace-asynctask-asynctaskloader-rx-observable-rxjava-android-patterns (参考1の元)
参考3: 俺が RxAndroid について知っているいくつかのまとめ
大分前から色々話題になってるRxAndroidをちょっとざっくりと使ってみた
※あくまで個人的なメモなので詳しく知りたいなら上記の参考を読んだ方が良い
※0.24以降になるとAndroidScheduler以外は無くなるそうなので以下のAppObservableを使うには0.24より上のバージョンでは使えなくなるらしい
chrome.identity APIを使ってGoogle App Engine OAuth2を使うの続き
前回ではJavaScript(Chrome Extension)側からchrome.identityのAPIを利用してアクセスしてレスポンスを取るみたいな事しましたが、AndroidでAccountManagerを使って端末に紐付けしてあるGoogleアカウントを使ってリクエストする場合どうなるのって事でやってみた
参考: http://ksoichiro.blogspot.jp/2014/05/androidgradle-jacoco.html
gradle-android-plugin辺りで0.9.x辺りからサポートされてた気がするけどやってなかったのでやってみた
前回やったengine.ioの記事にも書いてるが、Java向けのクライアントライブラリが既にengine.io-client-javaっていうのがあるので、それを使えば出来るだろうってことでやってみた
※サーバーは前回のをそのまま利用
https://groups.google.com/forum/#!topic/robolectric/xsOpEwtdTi4 にあるように元はJake Wharton氏が開発されていてdeprecatedになっていたgradle-android-test-pluginをrobolectric開発チームによってメンテされるようになった模様
てな訳でgradle-android-test-pluginを使いつつの、robolectricでの単体テスト及びespressoによるUIテストをやってみる
公式: https://code.google.com/p/android-test-kit/wiki/Espresso
APIリファレンス: https://android-test-kit.googlecode.com/git-history/master/docs/javadocs/apidocs/index.html?r=master
タイトル通り、EspressoのUIテストキットなライブラリを使ってUIテストをするっていうのをやってみた。まぁ導入周りとかそっち系の単純な話だけなので(ry
公式リファレンス: http://developer.android.com/reference/android/support/v4/widget/SlidingPaneLayout.html
android.support.v4.widgetにSlidingPaneLayoutっていうのが追加されていたのを今更知ったので検証してみた
参考: [Android] Support Library に追加された SwipeRefreshLayout - @adakoda
上記参考によるとAndorid Support v4 packageにSwipeRefreshLayoutっていうのが追加された模様。んまぁ見る限りだとAndroid PullToRefreshとActionBar PullToRefreshを組み合わせたのっぽいような感じもするんですが
という事で使ってみた。ちなみに/path/to/android_sdk/extras/android/support/samples/Support4Demosにサンプルが入ってる
まぁ要はListViewの末尾に達したら新しいデータをロードする等の仕組みを提供する機能的なやつ。Android PullToRefreshにはそういう機能があったけど、何回かふれているけどActionBar PullToRefreshを使うべきという形になっているので、それっぽい機能をどうするかって所なんですが
調べた所によると、LoadMoreListViewっていうのを利用する事で出来るっぽい。という事で使ってみた
参考: http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
今時な手法として良いかは知らんけど、例えばAndroidプロジェクトでライブラリプロジェクトを伴うけど、アプリプロジェクトとは別で開発されていてそれは社内なりのMaven Repositories(後術参考)を介して利用できる。それをやってみた
GradleのRobolectricテスト用プラグインとして、非推奨になったJake氏のgradle-android-test-pluginではなくNovoda氏のrobolectric-pluginを使っているサンプル http://t.co/lgPqRqbHHE …
— なかざん@ミラ・イース現象だ!!! (@Nkzn) 2014, 2月 17
っていう事でrobolectric-pluginっていうのがあるっては知ってはいたんですが、どうも上手く行かなずな感じで。まぁ一回は挫折したんですが再チャレンジでようやくテストの実行が出来たのでメモっておく
参考: http://starzero.hatenablog.com/entry/2013/12/22/201149
gradle-android-test-pluginがいつの間にかDEPRECATEDになっているっていうのを知らずに(ry まぁ他に手段ってのもなかなかなものなので、とりあえずRobolectric演習的に使ってみる
っていうActionBar-PullToRefreshを使っている場合において、メニューでリフレッシュボタンとかでActionBar-PullToRefreshを発生させるような要件を実現したい場合にはどうすれば良いのか。簡単に言えば上記画像中の右上にあるリフレッシュボタンをクリックする事でonRefreshStartedメソッドを発生させたいっていう所
っていうのをやってみた
例えばapp/build.gradleがあって
apply plugin: "android"
repositories {
mavenCentral()
}
dependencies {
compile "com.actionbarsherlock:actionbarsherlock:4.4.0@aar"
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
}
じゃなくて
apply plugin: "android"
dependencies {
compile "com.actionbarsherlock:actionbarsherlock:4.4.0@aar"
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
}
的な感じである程度共通化出来る部分は省略したい
※ActionBar-PullToRefreshも「PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED」になってますので現時点で使う場合注意
Android PullToRefreshにも追記しましたが、Android-PullToRefresh は既にdeprecated(正確にはNO LONGER BEING MAINTAINED)らしいので、ActionBar-PullToRefreshを使えとのこと。つーことでListFragmentを使う場合のドキュメントを見つつやってみた
※但し、Android PullToRefreshとActionBar PullToRefreshはスタンスは異なるかと思われますので
例えば、アプリプロジェクト・ライブラリプロジェクトの両方を持ちつつActionBarSherlock等のような外部のライブラリプロジェクトを利用する場合のgradle-android-toolkitでのビルドってどうなってるかとか辺りをまだやってなかったのでやってみた (※Android Studioに関してはノータッチで)
※以下のバージョンのgradle-android-toolkitはGradleのバージョンが1.10くらい辺りからじゃないと動かないので(ry
的な感じでChrome拡張機能にあるchrome.browserAction.setBadgeText的な事も出来るリロード機能に特化した?AndroidライブラリのRefreshActionItemを使ってみた
おおー > SwipeListView Demo - Google Play の Android アプリ https://t.co/VCQQ5I8c5n
— kinjouj (@kinjou__j) 2014, 1月 31
っていう事で使ってみた
参考1: Getting Your SMS Apps Ready for KitKat
参考2: Android KITKAT: デフォルトSMSアプリを作る - ブライテクノBlog
※非常に内容がざっくりとしてますので上記参考を(ry
Android 4.4(Kitkat)からデフォルトなSMSのアプリを作って利用する事が出来るらしいとの事は知っていたのだけど検証的な辺りとかしてなかったので色々やってみた
ottoな勉強をするにあたってそういう要件が必要にならないと例にならない気がしたので、ActivityRecognitionを使って行動認識をActivityへottoを使って通知する仕組み的な事やってみた
Android Library Rankingで1位になっているAndroid SlidingUpPanelっていうのが気になったので使ってみた。んまぁAuthor見れば分かるがUmanoっていうアプリで使われてるそうで
でどういうライブラリなのかざっくり画像で見せると
っていう感じになってて下側にあるsliding contentsっていう部分をひっぱることが出来る
まぁ今時は使われてないけど、似たようなのにAndroid公式でサポートされているSlidingDrawerっていうのがある。まぁようはそれっぽい動作をする物みたいな感じ
https://github.com/square/picasso っていうのがあるのを知り使ってみたんだが、これなかなか使えるのではと
CalendarっぽいViewなのでhttps://github.com/square/android-times-squareっていうのがある模様。ってな訳でちょいと使ってみた
ActionBarSherlockの開発者(だはず)でもあるJake Wharton氏がgradle-android-test-pluginっていうのを開発している模様っていうのを知ったので使ってみた
以前gradle-android-toolkitでRobolectricを動かすっていうのをやったのでそれをそのまま使う。修正するのはbuild.gradleだけ
socket.io-java-clientを使えば出来るらしいのでちょっと要件検証目的でやってみた。ちなみにsocket.ioサーバーはnode.jsなやつを使う
※ソースを完全に読んだ訳じゃないので若干微妙なのであくまでネタとして
例えば、DialogFragmentを継承したクラスを作りsetArgumentsでandroid.os.Bundleを指定してパラメーターを渡す。そこまでは良いのだけど、そのパラメーターに値が入ってないとかgetSerializableなりはできるけどnullが返ってきてるような場合でそのままonCreateDialogを実行されてしまうとNPEなりの問題が発生してくる訳。そこら辺の制御とか辺りどうするのかって所なんですが
Android+JsonPullParserでも書きましたけど、公式にあるcustom_rules.xmlを使うとアノテーションプロセッサのクラスパスに他のライブラリ参照が入ってないので、APT処理によるソースの生成は成功するけどエラーが色々出るのはイケてないなーって思ってて、どうにか修正せねばって事でやってみた
AndroidでJsonPullParserを使うっていうネタ。まぁ公式にもサンプルあるしそれ参考にすれば良いんじゃねって所なんで
※@JsonModel等は前回のをそのまま利用
ネタ帳からの大体そのままな引用(要は雑って事)。以前、Androidのソフトウェアキーボードを作って、PC側とbluetoothを経由してスマフォ上のテキスト入力をPCから入力させるとかっていうのをやってた。とりあえず書いておこうかと
昔書いたネタをそのまま書く。
※リソース開放方式まで考慮してないので、そこら辺は活用する場合にはそれなりに要修正必須
※onBufferReceivedが機種依存により呼ばれないのもあるそうです
android.speech.SpeechRecognizerを使って音声からテキストを起こすAPIがあるけど、この際に音声データ自体も保管しておくっていう事をする。
んまぁSlidingMenuだったりだとか色々あるのですけど、Googleが公開したNavigationDrawer方式をベースに使えるようにした物がSherlockNavigationDrawerらしい、正しいかは微妙だけど。ちなみにデモアプリもあるのでちょっとどんな感じかってのを見たければそれ入れて確認してみるってのも可能
という事で使ってみた (ただ公式なサンプルを見て自分で書いてやってみただけなので、ほとんど同じ)
Robolectricなテストプロジェクトをgradleで動かすなネタと若干似てますけど、こっちではandroid toolkitなgradleプラグインを用いてAndroidアプリをビルドする、testタスクを利用してsrc/test/javaにあるクラスをRobolectric利用でテストを実行するっていう方式をやってみた
普通ならAndroid Studioから「New Project」 -> 「New Module」でAndroidプロジェクトなりモジュールなりどんどん作成していくだけで良いと思うんだけれども、Android公式がサポートしているandroid-toolkitなgradle supportを使ってプロジェクト構成を作った場合なケースに関して検証してみた
但し、android用のgradle pluginだとかrobolectricなgradle pluginはある模様だけどそれを使わずに素のbuild.gradleだけでごちゃごちゃとやってみた
Robolectric+powermockitoでRobolectricを利用している際におけるstaticメソッドのモック化っていうのを書いたけど、単純にRobolectric+Mockitoを使ったインスタンスメソッドのモック化に関してはスルーしてたので色々検証
参考: http://addie9000.blogspot.jp/2012/12/robolectricpowermockandroidunit-test.html
Robolectricを使ってJUnit4ベースでテストしたいけど、PowerMockitoを使ってstaticメソッドをテストしたいって思ってもRobolectric自体が@RunWith(RobolectricTestRunner.class)を使うので、PowerMockitoのPowerMockRunner.class指定出来ないよねっていう事で上記の参考にRobolectricでのPowerMockitoの動かし方参考にしつつやってみた。ただ気になる事の検証的な目的かなと
※但し、上記の参考のRobolectricバージョン(1.1)とこの記事のバージョン(2.2)は違う
Androidっていうか単純にJNIに関する事だと思うので(ry
おそらくは通常だと
JNIEXPORT JNICALL jstring Java_パッケージ_say(JNIEnv* env, jobject thiz) {
}
的な感じでパッケージ名とメソッド名をconcatしたような名前の関数を定義する方式が一般的に知られていると思われるのですが、Androidのコアパッケージのソースとか色々見ているとNativeMethodsパターンな方式を採用しているのが多い。つまり上記のように定義しないっていうのがAndroidでは一般的なのかなと。んまぁNDKというかこういう辺りな事をやる事自体まったく無いんだけれどもやってみた
いわゆるライブ壁紙っていう機能。SurfaceView的な感じで壁紙に動的にレンダリングしたりとか出来る
まぁ自宅のメモ用ブログには書いてたけどこっちに書いてなかったので、美人時計サービスを利用して1分毎に動的に壁紙をレンダリングするっていうのをやってみる。ただ、結構雑に作ってあるので(ry
※あくまでLive Wallpaperってどんな感じで作るのかっていう
android.accessibilityservice.AccessibilityServiceを使用してNotificationを取得するをAndroid4.x以下(3.x系を除く)な2.x系で動かす場合、<meta-data>によるAccessibityServiceInfoの構築?はサポートされてない模様。
という事でやってみた
タイトル通り、Android4.3から追加されたらしいNotificationListenerServiceっていうのがある模様。どうやらAccessibilityServiceを使って通知を取得するっていうのは以前にやったけれども、それと同等な事をサクッと出来るようになったっぽい
とりあえずwktkしてるので使ってみた
っていうのがあるらしい。ホームボタンからスライドするなりで起動(もしくは一覧から選択して起動)したり出来る模様。おそらくはAPI Level 16から出来るらしいのでAndroid4.1辺りかなと
https://github.com/StevenRudenko/ActionsContentView
SlidingMenuと同様なUIコンポーネントライブラリ。まぁサイドバーを設置してスワイプする事で出てくるようなメニューUIを実現するようなライブラリ。使ってみた
ちなみに https://play.google.com/store/apps/details?id=sample.actionscontentview にデモがあるので
PullToRefreshを使うのは良いけど、PullToRefreshBase.OnRefreshListenerを使用して発生するListViewの下部に向けてスライドする事でリフレッシュするUI処理をテストしたい場合
ViewPager(+FragmentPagerAdapter)を使っている際に、Activityのテスト(ActivityInstrumentalTestCase2)でViewPagerで利用されているFragmentPagerAdapterを取って、そのFragmentを取得してごにょごにょテストする方法
[Android]Android-PullToRefreshで右上の矢印(Indicator)を非表示にする http://t.co/t5FhAO2hNY
— kinjouj (@kinjou_j) July 1, 2013
だそうです。こっちでもやってみたら見事に消えてくれた(setShowIndicator)
※以下のAndroid-PullToRefreshは現時点でも既にdeprecatedになっており、 https://github.com/chrisbanes/ActionBar-PullToRefresh を使うべきだそうです
https://github.com/chrisbanes/Android-PullToRefresh を使うにあたってListFragmentでPullToRefreshをする場合
https://code.google.com/p/robotium を使う事でSelenium likeな方式でUIをシナリオテスト的な感じで使えるらしい
※以降で継承しているBaseActivityTestCaseはただのActivityInstrumentationTestCase2のサブクラス
んまぁライブラリプロジェクト自体をJenkinsのビルドプロジェクト(フリースタイル)とかで定義しちゃっても良いとは思いますけど、ActionBarSherlockとかだったりだとか公開されている有用なAndroidライブラリとかを伴うプロジェクトをビルドするとなると定義するかプロジェクト内にぶち込んじゃうかっていう所だと思うのですが、その後者側の「参照するライブラリプロジェクト自体をビルドプロジェクトとして定義せずにアプリプロジェクトにぶち込んでビルド」するっていう方式的なのを検証してみた
ふと思って
そういや、AccountManager.getAuthTokenで返されるトークンってキャッシュされなかったっけ?
— kinjouj (@kinjou_j) June 7, 2013
って書いちゃったので調べた
以前Android AccountManagerで使えるアカウントを開発する方法を書きましたが同期的な機能のSyncAdapterをすっぽかしてたのでやってみた
今まで書いたAccountManager及びSyncAdapterなやつは認証トークンを適当に作ってそれを利用してAPIにリクエストを投げるという方式だったのですが、そのサーバー側の問題が色々あるのでそこら辺をRailsで組み直し、Android AccountManager+SyncAdapterではOAuthを使ってAPIリクエストを行う方式というのを採用してみた。要は
https://github.com/JakeWharton/Android-ViewPagerIndicator
PagerSlidingTabStripと似ているんだが、どっちかと言えばこっちがメジャーなのかな。ActionBarSherlockの開発者の方がこちらも開発されている模様で
https://github.com/astuetz/PagerSlidingTabStrip
デモアプリもある模様だからそれみれば良いんだけど、いわゆるViewPager+PagerTabStripにインディケーター装飾を付ける物なのかなと。とりあえず以前書いたのをベースに使ってみた
BaseAdapterを用いる際にはgetFilterなんてメソッドが存在しないのでどうすんの的な感じなんだけど、Android FrameworkソースのArrayAdapterは
android.widget.SearchViewなメニューのActionView自体が多分Android3.xくらいからサポートされたんだと思うんだけど、ActionBarSherlockにそれと同等な感じのWidgetが存在する模様。という事でAndroidAnnotations+ActionBarSherlockな構成でやってみた
Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description
っていうようにテストを起動したりしようとするとこういうエラーが出ちゃう。その原因っていうが単純でmockitoの中にhamcrestのインターフェース群っぽいのが含まれている模様なので、これのクラスとhamcrestのjarに含まれているクラスが衝突してclasses.dexを生成するにあたってエラーになるんじゃないかと
例えば、なんかの登録処理をAlertDialogで表示させてsetViewでフォーム的なのをビューとして利用、そのAlertDialog自体はDialogFragmentで生成される。でそれのテストをどうやるのかって所なんですが、DialogFragmentはレイアウトにIDとか含まれず
AddFormDialogFragment fragment = new AddFormDialogFragment();
fragment.show(getSupportFragmentManager(), "add_form_fragment");
的な感じで使ってる場合にそのUIの振る舞いな処理をテストするにはって所なんですが
ActionBarSherlockなActionBarを使いつつの、ホームアイコンをタップしたらSlidingMenuが出たり消えたりするっていう所なUIテスト的なのをちょっと色々やってみた
カバレッジレポート出力で特定のパッケージとかライブラリプロジェクトとして参照しているのは除外(あくまで自分が作ったのじゃない物)したいとかっていうケースがあると思うのですが、ant.propertiesにemma.filterっていう形式で書けば良い模様
http://blog.kawamura-lab.com/?p=68
を参考にしました。まぁ普通に「android update (test-)project」的な事をやったら生成されるbuild.xmlのantタスクでemmaタスクでサポート出来る模様。でこっちでハマったのがライブラリプロジェクトの扱い、ライブラリプロジェクトにもbuild.xmlとかそういう辺りが必要な模様(フィルターすれば必要ないのかは不明)
https://github.com/jfeinstein10/SlidingMenu
っていうfoursquareとかのアプリとかで採用されているやつらしく、Facebookアプリとかでも左上(通常はActionBarとかにアイコンが表示されている部分)を押すと左にサイドメニューがびょ〜んって出てくるやつ、あんな感じなのを実現できるライブラリな模様で
参考: http://qiita.com/chuross/items/e3ca79065d9b67716ace
https://github.com/nostra13/Android-Universal-Image-Loader
ちょうど、AndroidAnnotations+Twitter4jで作ってたデモアプリ的なのがあったので、そいつでプロフィール画像をロードする仕組みな所をこのUniversal Image Loaderを使ってプロフィール画像を読み込むっていうのを処理してみた
※以下のAndroid-PullToRefreshは現時点でも既にdeprecatedになっており、 https://github.com/chrisbanes/ActionBar-PullToRefresh を使うべきだそうです。既に補足済み
シリーズネタになるかどうかは現状微妙ですが...
PullToRefreshっていう引っ張ってリロードしたりだとか、画面中でデータが末尾に達した場合に次のページなデータを読み込むかだとか、んまぁそういうのを実現したい時に便利なのが https://github.com/chrisbanes/Android-PullToRefresh っていうのがある訳なんですが、まだ使ってみたりとかした事が無いし、ちょっと要件としてそういうのが出てきたので使ってみた
一般的にAndroid3.x以下のバージョンにおいてはActionBarそのものがサポートされてない。でAndroidのサンプル集にActionBarCompatっていうのがあって、それを利用する事でAndroid3.x以下のバージョンでもActionBar同様なUIを実現する事は出来る模様(但し、ActionBarクラス自体が存在する訳じゃないのでそれは使えない。あくまでUI的な所かと)
多分、Androidに限った話じゃないと思うのですが
たまたま見ていたらandroid.service.dreamで指定出来るDayDreamの定義XMLでsettingsActivityっていうのがあるのに気づいたのでやってみた
まぁAndroid公式にBluetoothChatっていうのはありますけど。一応Android側はそれのソース読んでやってみたって話。ただこれはAndroidとPC(Ubuntu)をbluetooth RFCOMMを使って通信するというところになる
録画って言い方がどうも微妙なんですが、Androidアプリとかで概要な動画を撮りたい場合とかあるのかも知れないし、無いかも知れないし〜。という事でUbuntuを使って撮影する方法
んまぁAndroid端末使ってる人とかだと見た事あるし、触った事もある人もいるだろう
まぁWebサービスとかのアカウントを端末内に保管して、認証要求だとかをAccountManagerな機能を通じて行えたり出来るAPIが存在する訳ですが、これの独自のを作る方法。まぁ結構書く量が多いので
検証したのいつかは覚えてないんですが、ネタとして書いておく
Android API Level 11(Android3.x)くらいから(RemoteViews.setRemoteAdapter辺りがAPI Level14が必要なのでAndroid4.0以降)だと思うんですが、AppWidgetにListViewが使えるようになってる。それを検証したという件
Android4.x系からはShareActionProviderとかあるんすけど、それを使わずにActionProviderを使ってShareCompatで共有の処理を実装する方法
Android4.2から追加された模様なDreamService API(公式的にはDayDreamかと)をさっそく使ってみた。単純に言うとスクリーンセーバー機能。
最近、サーバー関係なタスクが多くてAndroidな音沙汰がまったくしなかったのでリハビリ的な感じでちょいと調べ物をしてました。それがだいぶ前からGoogle Play等であったように
の上部に表示される「おすすめ」や「カテゴリ」といったようなヘッダーラベルのような物。これどうやってやるのかって調べたらPagerTitleStrip、PagerTabStrip等を用いる事で簡単に出来る模様。なのでやってみた(実行環境はAndroid2.2)
(AndroidManifest.xmlはアクティビティ定義だけなのでパス)
ちょっと前にDeskNotifierっていうスマフォの通知をPCにプッシュするというアプリがあったのを見て思ったのですけど、(Android)スマフォのNotificationって監視して取得したり出来る物なのかっていう所が不明だったので色々と調査
で調査結果としてAccessibilityServiceを使う事で可能な模様、という事でやってみた。まぁ詳しい事は公式ドキュメントに書いてあるんですけど
なんかどっかで見た気がするのですが、例えばでかいファイルをダウンロードする必要性がある場合に3GではなくWi-Fiを使ってダウンロードさせたい。っていうか正しいのかは曖昧なんですが、「通信制限が存在するネットワークでダウンロード処理を継続しない」っていう処理をする場合等に使える模様。
android-support-v13.jarの中身を見てたらそういうのがあるっていうのを発見。で色々調べてみたら、なにやらスクリーンセーバーのような物を作れるAPIな模様。という事でやってみた
んまぁAndroidのKeyboard APIを使って独自のキーボードを作って、それをBluetoothのRFCOMMを介してPCからAndroidスマートフォン側に入力をさせるというしょうもない事をやってみてる。まぁ実際やったのはかなーり前の話なんですが今更ながらネタにしてみようかと
Android4.xから使える(んだと思われる)SpellCheckerServiceを使って、独自のスペルチェックを行うサービスを作りそれをアプリから利用してみる
Quick Search Box関係を調べていて勉強しているとふと思ったのが、クエリーによる検索をするのは良いけど例えばフィルターをする実際の処理を自分で実装した場合とかどうするのって思った。というかどうやらデフォルトのAdapterのフィルターだと検索キーワードをトークンで分割してフィルタしてくれない模様なんだけど。という事でフィルタ処理を自分で処理する方法を調べた所だと、Adapterとそれが使用するFilterオブジェクトを拡張してやれば良いらしい
Android4.0以前だとonReceiveメソッドをそのままインスタンスメソッドとしてAndroidTestCaseを使ってテスト出来たんですけど、Android4.0からだとエラーになる。そのエラーになるケースがsetResultExtrasを使った場合になるんですが[APIドキュメント][1]によると
Change the current result extras of this broadcast; only works with broadcasts sent through Context.sendOrderedBroadcast. This is a Bundle holding arbitrary data, whose interpretation is up to the broadcaster. Can be set to null. Calling this method completely replaces the current map (if any). This method does not work with non-ordered broadcasts such as those sent with Context.sendBroadcast
って書いちゃってんすよね。英語読める訳じゃないけど、要するにsetResultExtrasを使う場合はonReceiveをそのまま実行してもsendBroadcastでやっても出来ないらしいっぽい事を書いてる気がする。じゃあどないすんねんと。まぁ書いてあるとおりにsendBroadcastではなく、sendOrderedBroadcastを使えとの事らしいので
例えば
package sample.test;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.database.MatrixCursor;
public class SampleLoader extends CursorLoader {
public SampleLoader(Context context) {
super(context);
}
@Override
public Cursor loadInBackground() {
Cursor csr = null;
try {
MatrixCursor mc = new MatrixCursor(new String[]{ "_id", "NAME" });
mc.addRow(new Object[] { 1, "hoge" });
mc.addRow(new Object[] { 2, "fuga" });
mc.addRow(new Object[] { 3, "foobar" });
csr = mc;
} catch(Exception e) {
e.printStackTrace();
}
return csr;
}
}
的な感じで作っといて、これをテストする方法ですが。普通にLoaderTestCaseっていうのがあるので