投稿

Android の SharedPreferences データはオンメモリで保持されている

SharedPreferences 関連の不具合を調べていてAOSP のコードを見ていたら、 SharedPreferences の挙動について気づいたので Tips としてメモしておきます。 SharedPrefereces に保存した設定値は読み捨てでOK Androidアプリで設定等の小さいデータを保存するのに使用する SharedPreferences ですが、Android Framework 内では SharedPreferencesImpl   というクラスで実装されています。 SharedPreferencesImpl (Android 5.0.1) http://tools.oesf.biz/android-5.0.1_r1.0/xref/frameworks/base/core/java/android/app/SharedPreferencesImpl.java このクラスではコンストラクタでXMLファイルからデータを読み込み、 Map<String, Object>   で SharedPreferences の中身のデータを保持し続けています。 try { stat = Os.stat(mFile.getPath()); if (mFile.canRead()) { BufferedInputStream str = null; try { str = new BufferedInputStream( new FileInputStream(mFile), 16*1024); map = XmlUtils.readMapXml(str); } catch (XmlPullParserException e) { Log.w(TAG, "getSharedPreferences", e); } catch (FileNotFoundException e) { Log.w(TAG, "getSharedPreferences", e); ...

Nexus 6 の調子が悪い

Nexus 6 の調子が悪い。 週に一回くらいポケット内で再起動。(たまになら許す) 再起動後に PIN 入力求められるが、ポケット内なのでタイムアウトしてシャットダウン。(これは仕様) 再起動後に30分くらいモバイルネットワーク(docomo)を掴まない。 掴んだと思ったら IP アドレスが取得できずデータ通信ができない。 IP アドレスが振られたと思ったら LTE ではなく HSDPA。 一日後くらいにふと気づくと LTE 掴んでる。 掴んでもしばらくすると見失うことがある。 アンテナピクトに H も LTE も表示されてないのにデータ通信できる時がある。(これは表示バグなのでどうでもよい) とりあえずファクトリーリセットしました。 Tap & Go 便利。 はやく Lollipop MR1 降ってきて。 追記 2015/03/04 コメント欄で指摘していただいたとおり、不要なAPN設定を削除することでモバイルネットワークの安定性が劇的に改善するようです。

Nexus 6 XT1100 買った

イメージ
いつまで待っても Google Play の在庫が復活しないので、Y! mobile で Nexus 6 を買いました。 キャンペーンも特にやってないので、定価の完全新規でベーシックプランS契約しました。 ポイントのつく量販店で買って、即解約すれば日割り支払いで済むので、契約手数料を含めても Google Play で買う場合より出費は少ないです。さっさと買ってればよかった。(・・・Yモバブラックになる可能性は高いですが) サイズのわりにそれほど持ちにくくないですが、片手で使うには少し修行が必要ですね。 背面が金属なので持った感触がサラサラしててとても良いです。 Nexus 5 に引き続き、Qi で充電できるのも地味に便利です。

2014購入記録

今年も携帯電話買ってしまった。 携帯電話 Sony - SOL23 Xperia Z1 LGE - Nexus 4  HTC - One (M8) for Windows  Sony - SO-04F Xperia A2 AV機器 audio-technica - ATH-CKM99 Onkyo - D-309E Sony - NW-A16 コンピュータ Sony - VAIO Pro 13 red edition Kensington - SlimBlade Trackball    Enermax - Revolutiohn-X't ERX530AWT カメラ Sony - DSC-QX10 ゲーム SCE - PlayStation 4 SCE - Flowery SQEX - Tomb Raider: Definitive Edition SCE - inFAMOUS: Second son

Universal Windows の GridView で特定のアイテムを選択不可にする方法

イメージ
WP8 の LongListMultiSelector で特定のアイテムを選択不可にする方法 の続き(?)です。 Universal Windows アプリへの移植 Universal Windows アプリケーション では、Phone アプリも Windows Runtime API (いわゆるMetro、Modern)アプリ用の API を使って実装します。そのため、今まで Phone アプリを開発していて Universal に移植する場合には多くのコントロールを置き換える必要があり、 LongListSelector や Toolkit の LongListMultiSelector を使用していた場合もこれに当てはまります。 前回と同じくやりたいことは、 「ViewModel の特定にプロパティの変化に応じて、既に表示済みであっても動的に GridViewItem の選択可不可が変わること」 です。 試したこと まず、試して効果がなかった方法を挙げておきます。 ViewModel に IsEnabled プロパティを追加する ItemContainerStyle で、GridViewItem の IsEnabled プロパティに IsSelectable をバインドする ItemContainerStyleSelector で、IsSelectable に応じて別のStyleを適用する 最初に気づきましたが、アイテムが選択できるかどうかは ItemContainer (GridViewItem) の IsEnabled でも制御できるようです。なので、上記の方法は IsEnabled にどのように ViewModel のプロパティをバインドするか、という観点で行っています。 ※ WP8 のときに LongListMultiSelector の中にまで手を加えたのはやり過ぎだったのかもしれません。今更ですが。 1番目の方法ですが、GridViewItem の IsEnabled は ViewModel の IsEnabled をバインドしていないので効果がありません。 2番目の方法ですが、XAMLで下記のような実装をしました。 <GridView.ItemContainerStyle> ...

そういえば、Nexus 4 と One M8(Windows) と Xperia A2 を買ってた

イメージ
Nexus 4 10月末くらいに Expansys で投げ売りしていたリファビッシュ品の Nexus 4 を買っていました。 なかなか質感が良く、裏面のキラキラもかっこいいです。 Lollipopのファクトリイメージを焼いたらそれで満足しました。 HTC One M8 for Windows (Verizon Wireless) 9月ごろ出張に行った時に買おうと思ったのですが契約なしでは買うことができず、10月末くらいに Amazon.com で注文して長期出張でUSに行っている友達に転送してもらいましたが、Fedex で送ってもらったら送料が1万円くらいして驚きました。 Lumia 920 が壊れたのでメイン開発機として活躍中です。 Xperia A2 SO-04F メインで使っていた HTC J One HTL22 のバッテリーがヘタってきたので、白ロムで買いました。 満足感は何もないですが、不満もそんなにない無難な感じです。

WP8 の LongListMultiSelector で特定のアイテムを選択不可にする方法

イメージ
標準の Photos アプリで、複数コンテンツ選択モードに入った時の動画コンテンツのこの状態。 LongListMultiSelector を使っているようにしか見えないのだが、内部で使用されているLongListMultiSelectorItem には IsSelectionEnabled が true になった時に State.Closed (非選択モード)のままキープしてくれるようなプロパティは存在しない様子。 標準アプリなのに Toolkit カスタマイズして使ってるのか・・・ ということで、仕方がないので LongListMultiSelectorItem に IsSelectable プロパティを追加 セットされた DataContext に bool型の IsSelectable プロパティがあった場合にはそれを読み込む IsSelectable == false の場合には、State.Closed以外には遷移させない という修正を、 Toolkit に入れました 。 継承で乗り切ろうかと思いましたが、private と internal が多すぎて断念です。 それっぽく動いているように見えます。 終わり。