Android

okhttpのCacheControl.Builder.maxStale()

okhttpのCacheControl.Builder.maxStale()の挙動を勘違いしてた。たとえばこんなコードを書いたとする。 val CACHE_CONTROL = CacheControl.Builder() .maxAge(5, TimeUnit.MINUTES) .maxStale( Integer.MAX_VALUE, TimeUnit.SECONDS) .build() val call = o…

Toastの再利用

Androidで、サービス等のUIを持たないコンポーネントから画面にテキストを表示するToastというAPIがある。割と昔からあるものなので挙動も同じだろうと思っていたら、某社の端末(未発売)でトラブルがあった。 その端末のバグっぽい印象だったので割と邪道な…

KotlinのCoroutineScopeのメモ

やっとexperimental が外れたのでボチボチ使っていきたい。https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md や http://kotlinlang.org/docs/reference/coroutines/exception-handling.html を読みながら理解しようとしたが、…

Subway Tooter

Subway Tooter https://play.google.com/store/apps/details?id=jp.juggler.subwaytooterAndroid用のMastodonクライアントアプリです。 2017年4月23日に Playストアで公開しました。 (某所の「アプリを最速でリリースした話」よりさらに早い&速い) 当時の痕…

java.net.PlainSocketImpl.finalize() timed out after 10 seconds

java.util.concurrent.TimeoutException: java.net.PlainSocketImpl.finalize() timed out after 10 seconds at libcore.io.Posix.close(Native Method) at libcore.io.BlockGuardOs.close( BlockGuardOs.java:101) at libcore.io.IoBridge.closeAndSignalBl…

back stack を保持したまま現在のfragmentを入れ替える

素直に入れ替えると「back stackに記録された最後のフラグメントとcontainerに現在保持されているフラグメントがマッチしない」という問題が発生します。back stack の内容を書き換えるのは難易度が高いので、別の対応を考えてみましょう。 back stack をpop…

Androidの通知アイコン

2.3から5.0までの端末で表示確認を行ってみました。 画像が多いので別ページで http://juggler.jp/tateisu/android/notification_looks/

SharedPreferences と MODE_MULTI_PROCESS がイマイチよろしくない件

運悪くAndroidで複数プロセスのアプリを作ったり、アプリ間で SharedPreferences を相互参照するハメになってしまった場合に役に立つ…いや、たぶん立たないメモ。 Context#MODE_MULTI_PROCESS フラグはどのように使われているか このフラグはContext#getShar…

Androidアプリからのファイルパーミッションの制御

アプリ間のファイルアクセスの許可/禁止には unix のファイルパーミッションの仕組みが使われています。 ファイルパーミッション - Wikipedia Androidではアプリごとにuidとgidが割り当てられていて、パーミッションのうち、otherのread,write,execute ビッ…

Bitmapのカドを丸くする

「アイコン画像を角丸にしてくれ」 とか、割とよくある話だと思うんです public static Bitmap clip_radius(Bitmap src,int out_w,int out_h,float radius_x,float radius_y){ // 入力と出力の矩形 Rect rect_in = new Rect(0,0,src.getWidth(),src.getHeigh…

Androidアプリがどうデータベースを取り扱うか

端末にデータを保存するアプリを4日くらい書いてたので、その時に調べたことのメモ。 あ、書いてたアプリはこれです。 https://market.android.com/details?id=jp.juggler.SubwayTweeter 基本的な構造 SQLiteOpenHelper ↓生成 SQLiteDatabase ↓生成 SQLiteCu…

Android 3.0の壁紙について

Android 3.0のHomeは壁紙の扱いがかなり変わった。 手元にある端末だと 画面サイズは1280x768なのに、壁紙マネージャの要望するサイズ1920x1408だ。 でかすぎるだろ… 実際に表示されるのはおおむね中央部分だけで、残りの一部はAppDrawrや追加ボタンを押した…

Androidのテキスト閲覧ソフトの比較

2chのVIP板で連載されてた小説を、Android端末で読みたくなったんですよ。 71667行、1059640文字。UTF-8のテキストで、2.77MBあります。2ch特有の記事ヘッダなどがあるのでサイズは小説一本分よりやや大きめですが、非現実的なサイズではありませんね。DropB…

Android の Application task の、 Activity stack に関する怪現象

開発中に起きた出来事。発生した端末はXperia。 再起動してアプリをインストールし直したら発症しなくなったので、原因は分からず。 アプリの構造 このアプリは起動したら画面Aが表示されて、暫く待つと自動的に画面Bに移る。 ここで Home keyを押すと、A->B…

Android の java.net.HttpURLConnection

Android SDKで使えるHTTPクライアントクラスについて、gitから取ってきたソースを見つつその挙動を調べてみる。賞味期限の短い記事だと思うので、利用には注意してほしい。Android SDKで使えるHTTPクライアントクラスは三つある。 java.net.HttpURLConnectio…

apkファイルに含まれたAndroidManifest.xmlのデコード

androidのアプリケーションパッケージであるapkファイルを適当なアプリでSDカードにバックアップした後、そのzipされてる中にある AndroidManifest.xml を読むことになったのでメモしておきます。xmlなんですがバイナリにエンコードされています。 文字列テ…

Androidアプリの間違った作り方

とある外注さんが書いてきたコードがひどかった。 バックグラウンドでのオーディオ再生を、Activityから作成したワーカースレッドで行う。キャンセル処理は全く考慮していない。 UIスレッド上でばんばんHTTPリクエストを投げる。応答を読み終わるまでループ…