カテゴリー: Android

「オ…オデッサ・グレーディ・クレイ今起こった事を話すぜ! 俺はNexus9が文鎮になったと思ったら、いつのまにか起動するようになっていた。 な…何を言っているのかわからねーと思うが、俺も何を起きたのかわからなかった…頭がどうにかなりそうだった…今まで文鎮化したと勘違いしていただけなら、あたしってホント馬鹿…(´;ω;`)」

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


何がどうしてどうなったのか、全くもってよくわからないので何の役にも立たないエントリになると思う(ノ∀`)

今までのあらすじ
元々、バッテリー周りが怪しかったNexus9をNexus9のOSを5.1.1にしたった(`・ω・)=3 ドヤッのエントリで書いたようにOSを手動更新した後、全く起動しなくなった。充電も効かなくなった(充電マークすら表示されなくなった)。

俺氏は何度も復旧を試みたが、充電が上手く行かなかった……半年くらいした後、再び何回か試したがやっぱり駄目だった。

俺氏はソウルジェムが濁って魔中年になった(`・ω・´) カワシタヤークソク フフフンフンフ‐♪

いい加減文鎮を置いておくのも邪魔 → 勿体無い気もするが修理に出して許容範囲内の修理費用じゃなかったら処分したろと思い始める → まあ最後に駄目元で充電して起動を試したろ(・∀・)

と思って、数時間、純正のUSBアダプタとUSBケーブルで壁コンセントから直結(`・ω・´)
他の中華タブレット(X80 plus)でアマゾンプライムビデオのアニメをダウンロードをしてて、その状況を確かめるついでに電源ボタンを押す。

そうしたらNexus9の画面上に
Googleの表示がΣ(゚∀゚;)

かつて何度も充電を試みても成功しなかったのに、なぜこの時になって…( ;・´ω・`)ゴクリッ
何はともあれ、これで起動してくれるのであれば嬉しいことこの上ない。
四つ玉のアニメーションを嬉々として眺める(・∀・)

嬉々として眺める…(・∀・)

嬉々として眺める…(・∀・)?

嬉々として眺める…(´・ω・`)?

嬉々として眺め…

起動しねぇじゃねぇかヽ(`Д´)ノ

ということで取り敢えず、電源ボタン長押しで落とす。再び起動するも同じパターン(ヽ’ω`)
電源+音量(小)ボタンで起動し直してなんとかモードで立ち上げる。<-HBOOTとか言うHTCのAndroid製品の専用ブートローダーかなんか? Factory ResetしてもRecoveryしてもなんか上手く行かない(´;ω;`)
四つ玉状態…
何度も色々試したが一向に起動せず。

よくわからんが、PowerDownだかを明示的選択して電源を落とし、その後に電源ONした時だったろうか… ←よく覚えていない(ノ∀`)
Android5.0.1かなんかが起動したΣ(゚∀゚;)

キタ━━ヽ(゚∀゚)ノ━━ !!!!!


でまぁ、ちょろちょろ触ったところ、取り敢えず動くことを確認した(`・ω・´)
でも7.1.1のアップデートが落ちて来て実行したんだけど、相変わらず再起動せず駄目(´・ω・`)

仕方がないからAndroid Devから落として来た6.0.1のイメージを落として来てflash-all.batを起動して繋いだ実機をHBOOTで起動かなんかしたらオートで6.0.1にアップグレードされた。 まあ、途中で四つ玉画面でおかしくなって”System is corrupt”だか表示されたりはしたんだけどもw

本当は7.1.1にしてもいいのだけれど、スマホをAndroid7以降の安いやつにして、x80 plusのAndroid5.x.x、Nexus9のAndroid6.x.xと合わせて三世代使える状態にしようかなと思い、6.0.1へのアップグレードで止めておいた(・∀・)


もしかしたらうちの端末と同じような不具合を抱えているNexus9を所有するユーザーに役立つかもしれないTipsという名のオカルト的おまじないを記録しておこう。

取り敢えず、

  • 今回は充電時に2.4A出力のアダプタにちょっとだけ繋いだ。(でもNexus9は必要以上のA出力の場合は充電しない仕組みなんだっけ?)
  • 壁コンセントから正規品というか付属品のアダプタとケーブルで充電状態にして放っておいた。 <- 以前試した時は駄目だったが、今回は何故か上手く行った。もしかするとケーブルが内部断裂したり、端子部分に問題があったのか?
  • Recoveryは試しても止まってしまったままだったので、最後まで見届けていない。 <- なんか操作しないと駄目なんだっけ?
  • Factory Resetの後は電源が落ちて充電マークの状態になる。 <- これは以前からの上手く再起動しない症状だと思われる。
  • Factory Resetの後にHBootでPowerDownを明示的に選択して電源を落とさないと、変更が適用されない? <- あくまでも俺氏の推測に過ぎないが、電源周りがおかしいロットだと電源断や再起動が上手く行かずにOSの更新が上手く行かないのではないだろうか( ・´ω・`)

このあやふやかつオカルティックな情報が役に立つとも思い難いが、もしも誰かの役に立てば幸いである(・∀・)
俺氏んちのNexus9はAndroid6.0.1実験機兼Amazonプライムビデオ再生機として第二の人生を送ることになった。

本当はNexus9がリーズナブルな料金で復活しない場合はASUS ZenPad 3S 10 LTE Z500KLか、TeclastのT16辺りを買ったろうかと思っていたが、まあ、取り敢えずはいいかぁ(・∀・)

( ゚Д゚)ハッ
もしかすると、上記のような考えをNexus9が察知して、ようやく動き出す気になったのではなかろうかと考えてしまう非科学的思考の持ち主である俺氏であった……( ;・´ω・`)ゴクリッ

久し振りにAndroid SDKマネージャーを起動して更新してみたら…(´・ω・`)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


大きく分けて二つほどエラーが出るようになった(´・ω・`)

一つは”‘d:skin’で始まる無効なコンテンツが見つかりました。ここでは子要素を使用できません。”みたいなエラメッセージのDialogが出るやつ。

これは

  • Android Wear ARM EABI v7a System Image
  • Android Wear Intel x86 Atom System Image

をSDKマネージャーでdeleteしてしまえば良いらしい。

‘d:skin’で始まる無効なコンテンツが見つかりました。ここでは子要素を使用できません。
android – Error Loading the sdk when eclipse is started

ちなみにこの回答はAPI22の時の話だが、API23に関しても同じことをしないと駄目だった。
うちの環境ではAndroid TVかなんかでもエラーが出てたので、それらも削除したような…


もう一つはGoogle Play Serviceのライブラリ絡みで、“No resource found that matches the given name (at ‘value’ with value ‘@integer/google_play_services_version’)”とかいうエラーが出るやつ。

Eclipse 用の Google Play Services Library のありか
android – Missing “/extras/google/google_play_services/libproject” folder after update to revision 30
などを眺めていると、「Looks like Google just broke down Google Play Services into multiple libraries. (GoogleはGoogle Play Servicesのライブラリを複数のライブラリに分解したみたい)」みたいなことが書かれていたので、そういうことなんだろうか。

まあ、上のリンクの方の結論である、https://dl-ssl.google.com/android/repository/google_play_services_8298000_r28.zipを落として来て解凍し、”libproject”フォルダを\extras\google\google_play_servicesにペーストして、eclipse上でインポートし直したら、エラーが消えた。

これが本当に正しい対処方法なのかはよくわからないw
他にもaarを解凍して必要なライブラリを取ってくる?とかUnity用のパッケージをインポートしてなんか色々やると一応は解決するらしい。admobだかなんかのライブラリか?


原因はよくわからないが、取り敢えず解決したから良しとする(・∀・)

ちょっと寒くなってきた(´・ω・`)ブルッチョサムサム

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


相変わらずEditTextPreference絡みで悩んでいる。
onSharedPreferenceChangedでベリファイ(及び場合によっては修正)して更新する場合、ユーザーが入力後に再び同じ項目を開いた時にベリファイと修正がされず、正しくない値が表示されてしまうので、チョトカコヨクナイ(´・ω・`)

EditTextPreferenceの方のリスナでベリファイと修正をしてしまうべきのような気がしてきた。そうするとそこまでやるなら継承してカスタムしたEditTextPreferenceを作るべきなんじゃなかろうかと思ったり、なんか時間がかかりそうなのでまた躊躇したり。

本腰を入れて取りかかれば一日もかからないとは思うものの、PS2のディスガイアをついついやってしまったり、お仕事が見つからないから短期派遣のデータ入力に応募したりと色々と時間が足りない(´・ω・`) ナゼダ フシギダ


そういえば一般的なサンプルコードに載ってるサマリー更新の為のreloadSummary()みたいなメソッドだと子のPreferenceScreenのサマリーが更新されないことに気づいた(ノ∀`)

なんか変だなとは思っていたが、ブレークポイントを設定しても全く引っかからないので不思議に思い、ListAdapterのgetCount()メソッドでそのgetRootAdapter()で取得したアダプタが持っている項目数を見てみたら、明らかに少ないw 

よくよく考えてみたらPreferenceScreenに対してrootアダプタだから、その下のPreferenceScreenは別のrootアダプタを持つんだなw

ちょっと改変したが、この内容で正しいのかどうかは不明(ノ∀`)

private void reloadSummaryRecursive(ListAdapter adapter){
			Log.d("count", ""+adapter.getCount());
			for (int i=0;i<adapter.getCount();i++){
				Object item = adapter.getItem(i);
				if (item instanceof ListPreference){
					ListPreference preference = (ListPreference) item;
					preference.setSummary(preference.getEntry() == null ? "" : preference.getEntry());
				}else if(item instanceof SeekBarPreference){
					SeekBarPreference seekBar = (SeekBarPreference)item;
					seekBar.setSummary(String.valueOf(seekBar.getCurrentProgress()));
				}else if(item instanceof EditTextPreference){
					EditTextPreference editText = (EditTextPreference)item;
					editText.setSummary(editText.getText());
				}else if(item instanceof PreferenceScreen){
					PreferenceScreen ps = (PreferenceScreen)item;
					Log.d("Child count", ""+ps.getRootAdapter().getCount());
					reloadSummaryRecursive(ps.getRootAdapter());
				}
			}
		}

呼び出す時はちょっと面倒くさいが

ListAdapter adapter = getPreferenceScreen().getRootAdapter();
			reloadSummaryRecursive(adapter);

という感じになる。

ここまで書いてきて、アレ(´・ω・`)?ってなってきた。
なんで最初の方にListPreferenceやseekbarのサマリーをセットしてるんだっけ?
コピペしてきた元のコードがそうなっていたんだっけか?
その辺も調べなきゃ…(ヽ’ω`)

まるで他人が書いたようなコードを読むのは辛い(´・ω・`)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


ひさしぶりに数値を入れる為のEditTextPreferenceを新設して、値のベリファイやら不適切な入力値の場合には処理をして適正な値かデフォルト値にするようにしようとして悩む(´・ω・`)

他の16進数を入れるEditTextPreferenceはきちんと動いてるやんけヽ(`Д´)ノ
何処で処理してるんじゃいヽ(`Д´)ノ
とソースコードを眺める。

別にEditTextPreferenceを継承して新しいPreferenceを使ってるわけでもない…実行時にコントローラのコードでベリファイとかして、その値を保存し直してるわけでもない……… Σ(・ω・`≡´・ω・) ドコー

クラスを眺めているとColorEx.javaが。これで色絡みの処理をしていたような…それではと呼び出し階層を見てみても呼ばれてない…

これは一時的にコピーしただけだったかな…むむむ……( ゚Д゚)ピコーンッ!

わかった、こいつはstaticメソッドで呼ばれてるんだと、メソッドの呼び出し階層を見てみる。

あ(・∀・)
SharedPreferences.OnSharedPreferenceChangeListenerのonSharedPreferenceChanged()でやってたのか(ノ∀`)

そういえば前も個別にEditTextPreferenceの継承クラスを作るかどうかで悩んだんだったなw どっちがいいんだろうなぁ…onSharedPreferenceChanged()が大きくなりすぎてもよくなさそうだけれども。内容をメソッド化してそれを呼び出す形にすればいいだけか…