アプリケーションの更新通知に関して考えてみる
Google Playの通知をユーザさんが切っているかも?
なお話があり、アプリに実装しようかと模索してみる
最初
あたりで実装しようと思ったのですけど、これ専用の別Activityが必須で
下手に既存のActivityに組み込むと既存の動作がおかしくなる訳ですよねorz
MarketService ms = new MarketService(activity); ms.force(true); ms.level(MarketService.MINOR).checkVersion();
そんなときにTwでみつけたのがこれ
で直接弄ってみる
qiita にも言及があり
Android Asynchronous Http Clientを使ってみた - Qiita
既存の起動時のダイアログに
更新情報があれば、更新情報を付加する感じで作ってみた感じ。
さすがにダイアログ複数出すと厳しいですからね(汗
- キャンセル処理
あたりは効きが微妙かなと思う挙動をするかも。。(でもしないよりは良)
client.cancelRequests(this, true);
- タイムアウト時間
- setTimeout
はデフォルト10秒(10*1000ミリ秒)なので短めが吉
備考)
Locale.getDefault() が ICS 以降で常に en を返す件について
問題: Locale.getDefault() は ICS 以降正しい値を返さない回避策: getResources().getConfiguration().locale を使う
追記1)
ImageView用のライブラリもあるらしい(同じ作者
追記1-2)
@dmp さんが呟かれてた Picassoは Build.VERSION_CODES.ECLAIR 以上で動くよう(HTCでは問題無) IS01ではvierificationErrorが出たのでVolleyと同じく遅延実行に。でもVolleyより低レベルで動くからこっちが嬉しい
2013-08-29 13:49:17 via YoruFukurou to @dmp
追記2)
JSONを受信する場合は
な形式のデータ(日本語を \uXXXX )で、対象のJSONのエンコードがUTF-8でないと失敗するっぽい<自前でJSON作る場合
AsyncHttpClient client = new AsyncHttpClient(); client.get(url, new JsonHttpResponseHandler() { @Override public void onFailure(Throwable arg0, JSONObject arg1) { LogUtil.error(TAG, "JsonException:"+arg0.getStackTrace()); super.onFailure(arg0, arg1); } @Override public void onSuccess(JSONObject response) { super.onSuccess(response); }
他には
- BinaryHttpResponseHandler
等のバイナリ取得用(画像取得用?)のがあったりするけど
これでギャラリー用画像取得とかやると処理落ちするかも*1
同時実行数辺り制限書ければいいのかなーとかちょっと考察中
追記3)
オレオレSSL署名でエラーになる場合の対処
ssl証明無視できなくて死にかけてるなう。
2013-02-12 16:20:49 via web
@kerukerupappa 私も以前死にかけまちた。URL っぽいやり方でうまくいったけど
@sakura_bird1 行けましたー。さすがさくらさん。今度、大崎でお昼おごります。
2013-02-12 19:19:26 via web to @sakura_bird1
@kerukerupappa おお〜さすが解決はやーい!あの手のサイト5パターンぐらい試して夜を明かした思い出が(;O;)
@sakura_bird1 いえいえ。さくらさんのアドバイスがなければ、私も夜を明かしてましたよー。#感謝カンゲキ
2013-02-12 20:08:36 via web to @sakura_bird1
@kerukerupappa (ノ´∀`*)ヤーン
Exceptionを捨てる MySSLSocketFactory を作成して
AsyncHttpClient client = new AsyncHttpClient();
client.setSSLSocketFactory(mySocketFactory);
使う可能性があるのでメモ
備考)
実際使いました。
https://XXXX/hoge.png みたいなのDLするとき
BinaryHttpResponseHandlerに応答が戻ってこない・・・
設定したら嘘のようにキビキビ動くようになったなー
って感じだったりします*2
最初DownloadManager辺り使おうと思ったんですが
httpsに対応していないという記述を見つけて*3
NotoficationでURLクリックとか絡めてそれっぽいの作ってたりしてました。
gabu本 Recipe117 のDownloadManagerサンプル一度ダウンロードしてしまうと次から失敗してしまう動きは正?あとcreateDestinationUriでUri.fromFile(file)する前のfinenameに拡張子つけないとファイラで認識しない気も
- http://tnnsst35.com/2012/01/30/android%E3%81%AE%E7%94%BB%E5%83%8F%E4%BF%9D%E5%AD%98%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/
- 明日に向かって昇龍拳: Notificationをタップしてギャラリーで画像を開く
後者のは特に中途半端にしか書いてないので結構困ったりしてたりも。。
*4
追記4)
サムネイルとリストの実装の方法を調べる。
@kerukerupappa もうすぐノウハウだけでよちよち本2書ける勢い?
2013-02-13 21:05:16 via jigtwi to @kerukerupappa
@kimukou_26 かけませんのー。むしろ、教えて下さいぐらいの勢いです
@kerukerupappa android universal image Loaderとかはどうでしょう?(自分もまだ未検証ですが
2013-02-13 21:37:07 via jigtwi to @kerukerupappa
@kimukou_26 これ良さげですね。ただ時間の関係でグリッド+拡大dialogかpagerにしそうです。。。
@kerukerupappa つ URL & URL? 自分はAndroidAsyncHttpClientと合わせ技にしてしまってるけど
@kimukou_26 smart-imageはreferer対策が無いので、ダメでした。AsyncHttpClient便利そうですね。だけど、1処理で複数回を通信を発生させる場合、都度コールバックが発生するので視認性的な意味で使えないです。orz。
一応 smart-image-view の方は
- コードを確認してみたら同時実行4に制限はかけているみたい
- addHeaderするところがないですね(汗
java - Apache HttpClient 4.0-beta2 httppost, how to add a referer? - Stack Overflow
を参照すると
request.addHeader("Referer", referer);
を追加すると良いとのことなので(referは同一鯖しか画像DL許していないのであれば、そのサイトのURL)
Android AsyncHttpClient
client.addHeader(String header, String value)
を事前に読んでやればいい感じかも
追記5)
その他の雑記メモ>
- 端末情報を送りたいとき
- デフォルト
android-async-http/1.4.1 (http://loopj.com/android-async-http)
これだとUserAgentを利用して端末の判定ができないので、
UserAgentを書き換えるか、端末情報をパラメータで渡すといい。
client.setUserAgent(String userAgent)
- 同時実行数を絞りたい
- デフォルト
- Executors.newCachedThreadPool()
同時接続2にしたいなら
client.setThreadPool(
(ThreadPoolExecutor)Executors.newFixedThreadPool(2)
);
なイメージにすると良