カテゴリー: 覚書

「オ…オデッサ・グレーディ・クレイ今起こった事を話すぜ! 俺は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用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

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


Android 4.4のZL2 SOL25だとボタンは正常に表示されるのにロリポップだとボタンの
表示がおかしく、透過表示されない。 結局はただの勘違いだったわけだがそれに
気づくまでに色々とはまった…(ヽ’ω`)


ImageIconにsetImageResource()を使ってリソースをセットして、
How can I change the images on an ImageButton in Android when using a OnTouchListener?

setBackgroundColor(Color.TRANSPARENT)したり、
android – How to set transparent background for Image Button in code?

setBackgroundDrawable(null)しても
How to have a transparent ImageButton: Android

状況は変わらない…_| ̄|○


原因は一体何なのか調べようとダウンロードしたサンプルを見るとstyles.xmlで
謎のエラー。中を見てみると、マテリアルデザインのテーマを指定してるけど
何かがおかしいらしい。マテリアルデザイン自体、よく知らないのでぐぐる。

既存のAndroidアプリにMaterial Themeを適用する方法
[Android] マテリアルテーマを使う

ヒットしたページを見て、ああそういうものかと思いつつもエラーの原因がよくわからない。
更にぐぐる。
Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Material.Light’

( ゚Д゚)ハッ
プロジェクトビルドターゲットってandroid:targetSdkVersionって違うのかΣ(゚∀゚;)
などという素人丸出しの勘違いをしていたことに気づいた(ノ∀`)

プロジェクトビルドターゲットを22にしたら、無事に動いたが、ボタンの異常表示は
変わらず…(ヽ’ω`)


ちゃんと透過表示されているフローティングメニューの方はxmlのImageButton要素で
style=”@android:style/MediaButton.~”とidをセットしているだけで他に何もしていない。

( ゚Д゚)ピコーンッ!

これはきっとシステムが自動的に何か設定してるに違いない(・∀・) <- 更なる勘違いをスタック

attributes等を調べる。

よく分からない(´・ω・`) 色々と読んで判ったような判らないような状態になったところで
色々とリソースファイルの点検をやり直す。

(・3・)あるぇ?
 
 
 
 
 
 
 
 
ImageButtonの指定がstyle=”@android:style/MediaButton.~”じゃなくてローカルリソースをsrc指定していやがる…( ;・´ω・`)ゴクリッ

そうだこの音楽プレーヤーはニコイチどころかゴコイチ、ロッコイチくらいの、
sampleを切り貼りした暴君プログラム・タイラントだったのを忘れてた(ノ∀`)

そこでsrc指定していたローカルリソースをstyle指定でandroidのリソースに
変えたらボタン表示の異常はなくなった(・∀・)

でもよくよく考えてみると4.4できちんと透過表示されていた画像が、Lollipopで
透過表示されないのはやっぱりおかしいんじゃねぇかと思わないこともない( ・´ω・`)
何か変わってるのか。

関係ないけど、@android:style/MediaButton.Stopという画像は存在しないみたい。
機械式のテープ時代では一時停止にしたままにするとテープが伸びるとか摩耗するとかで
良くないと言う噂があり完全停止を推奨されていたけれども、デジタル時代では
そういうことがないから停止ボタンが廃止されているのだろうか?
まあ仕様によっては一時停止中の方が保持し続ける情報が多いのでほんのちょっとだけ
負荷が大きい場合もあるのかもしれないけれどw

停止ボタンはBackボタンで代用しようかなと思いつつ、ノーティフィケーション上や
ロックスクリーンでのことを考えると完全には排除出来ないような気がする。
悩みどころだ(´・ω・`)


ふと気づいたらRemoteControlClient は使用すべきではありませんみたいな
警告が表示されてる。ぐぐる。

Android 5.0 LollipopでのNotificationについて
Android 5.0 API概要

工エエェェ(´д`)ェェエエ工
RemoteControlClientってLollipopで非推奨になってんのかよ…(ヽ’ω`)
これの対応はちょっとどうするか考えよう。内容にきちんと目を通してないし。

マテリアルデザインを試す時にプロジェクトビルドターゲットを上げたから出るように
なったのか、それとも前から出てたけど気が付かなかっただけか…


なんでまあ、こう次から次と…(ヽ’ω`)

覚え書き 主にレイアウトの背景色

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

Google Play:
Mole's Match-up.

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


レイアウトとシークバーを色々といじっていて時間を浪費中…(ヽ’ω`)
まあ少しずつ問題は解決というかやりたいことは出来ていってはいるが、
これ本当に必要な機能なんだろうかと思ったり、思わなかったり。


レイアウトの背景色の取得
android – Get background color of a Layout – Stack Overflow

レイアウトの背景色のセットとColor.parseColor(“#nnnnnn”)
background – How to change color of drawable shapes in android – Stack Overflow

いつも忘れるHex文字列化(´・ω・`)
String hexColor = String.format(“#%06X”, (0xFFFFFF & intColor));
java – How to convert a color integer to a hex String in Android? – Stack Overflow


垂直シークバー
Working Vertical SeekBar for Android

API11以降ではandroid:rotationを使えばいいらしいが、少し変わったことをやっている
所為かいまいち上手く行かずに結局カスタムseekbarを利用することに。コード内容は
判ったような、判らないような…(ノ∀`)


Preferenceの根本的なレイアウト等をいじる
Android – 標準の設定画面をカスタマイズしたい その1
platform_frameworks_base/core/res/res/layout at master · android/platform_frameworks_base

設定値? まあ直で指定してもいいんだけど、一応
framework-res dimens.xml


あともうちょいで本当にコントローラ絡みが終わ…

( ゚Д゚)ハッ まだノーティフィケーションの方もそろそろ修正しなきゃ駄目か…(ヽ’ω`)

覚え書き 主にPreference絡み

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

Google Play:
Mole's Match-up.

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


PreferenceActivityというかPreferenceFragmentについては終わりと思い先に進もうと
思っていたが、ふとSeekBarを用いるPreferenceが欲しいなと思いぐぐる。
いっぱいヒットする(・∀・) ドレガエエンジャロウカ…

適当にAndroid 設定画面を簡単に作成する (ANDROID HACKS)のエントリのコードを
試してみる。上手く行った。これの中身を読んでベースにする方向でヽ( ・∀・)ノ

そう言えばpreference_widget_seekbar.xml内のSeekBar要素内で
xmlns:android=”http://schemas.android.com/apk/res/android”が指定されていて
eclipseだとエラーになった。これは一回だけ指定すればいいらしい属性みたいだが、
その辺のことはよくわからないので取り敢えず削ったらエラーが消えた。
問題がなさそうなので気にしないでおくか( ・´ω・`) イイノカ、ソレデ?

Preferenceの内部の動きを余り理解出来ていないと思い、Preferenceのカスタマイズに
ついて更にぐぐる。


三択プリファレンスがあった。コントローラのポジションはわざわざダイアログを出す
よりもこういった形で変更出来るようにしておいた方がいいのかな?
Preference(4)-Preferenceのカスタマイズ

三択プリファレンスは試したが、ダイアログの方は試していない。
うちがWindowsだからなのかSyntaxHighlighterのコピーを使うと
&nbsp;が中に混ざってちょっとめどかった(´・ω・`)
もしかしてうちのコードも他所の人がコピペしたらこうなってるのかな?

あとコード的には一致してるので問題はないが、なせcustom_prefernce.xmlなんだヽ(`Д´)ノと
eが抜けているのが気になったw すごくどうでもいいw


ダイアログの方はフルコードで載っているDialogPreferenceをカスタマイズするの方を試した。
パッケージ名を適当につけたのに、setting.xmlファイル内でのフルパス指定を
修正しなくてちょっとハマったのは内緒(*´・ω・)

[Android] オリジナルのPreferenceを作ってみるのサンプルはプリファレンスアクティビティの
表示は変更されたけど、ダイアログは普通の物と同じだったような。
Androidのバージョンの違いかなんかか、何か間違えてるのかな(ノ∀`)
内容を読んでみたがよくわからないので、取り敢えず必要になった時に
また読んでみよう。


Androidの設定画面で使うカスタムPreferenceを作るのサンプルは
名前空間名は適当(hoge)でいいみたいだけど、

xmlns:hoge="http://schemas.android.com/apk/res/hoge"

って

xmlns:hoge="http://schemas.android.com/apk/res/info.loadlimits.android.preference"

じゃないと動かないのではなかろうか。というかうちの環境では動かなかった。
ここもパッケージ名をきちんと指定しないと駄目なのか。


そう言えば、他のサンプルはattrs.xmlなのにこのサンプルはattr.xmlだなぁ、
なんで問題なく動くんだろ、違いはなんだろと思いぐぐった。特にそれに関する
記述は見つからない。ソース等を見てもattr(s).xmlを指定している部分はない。
xmlファイルを開き<resources>を眺めていて

( ゚Д゚)ピコーンッ! と閃く。

ファイル名をa.xmlにして実行してみる。動く。理解した(`・ω・´)

valuesフォルダのファイルって人間が理解しやすいように分けているだけであって、
実際はシステムが全xmlファイル内にある<resources>要素以下を調べて
<string>や<dimen>等のリソースを収集して一括管理してるんだなw

試しにdimens.xmlにattr.xmlやstrings.xmlの内容を移植してもちゃんと動いた。

xmlもxmlフォルダを掘らずにlayoutフォルダに入れてR.layout.~で指定しても
いいみたいだから、結構自由なんだな。まあお作法に従って作るべきなんだろうけど。

どうでもいいことだけど、謎が解けて面白かったw


サンプルは有難いが、基本的に判る人向けのためか断片的なコードまたは
ファイルのみということが多いので初心者である俺氏は試すのに苦労した(ヽ’ω`)

新規のAndroidプロジェクトをデフォルトで作成して(最小必須SDKだけ4.0.3にした)、
その他のファイル等を作成したりコピーして、MainActivityに

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;

public class MainActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		PreferenceScreen pScreen = getPreferenceManager()
				.createPreferenceScreen(this);
		pScreen.setTitle("Custom Preference");
		setPreferenceScreen(pScreen);

		addPreferencesFromResource(R.xml.[プリファレンス用のxml]);
    }
}

を貼っつけて、プリファレンス用のxml(通常xmlフォルダ以下に作ったxmlファイル)を
指定すれば簡単に試せる…と思う。 多分。

途中までわざわざPreferenceActivityを作って試していたのでめどかった(´・ω・`)


全然関係ないけど、なんでeclipseはアクティビティを新規作成した時に
マニフェストに自動追加してくれないんだろうか?マニフェストに記載しないと
アクティビティはシステムから認識されないのだから、アクティビティを作成した
段階で自動追加されるか、追加されていないことに対してのエラーが表示される
べきなのではなかろうかと思ったり。

ついでに新規Androidプロジェクトの作成ダイアログにxmlフォルダやdrawableフォルダ、
attrs.xml,colors.xml等の作成チェックボックスとかもついていれば更に良いのに。


サンプルコードを書いてる人達は何気なくTypedArrayを使ってるけど、TypedArrayって
なんだべ(´・ω・`)?

TypedArray
obtainStyledAttributes(AttributeSet, int[], int, int)またはobtainAttributes(AttributeSet, int[])を用いて取得される値の配列用のコンテナ。それらが完了した時には必ずrecycle()を呼んで下さい。この機構から値を取得する為に使用されるインデックス群はobtainStyledAttributesへ指定される属性の位置に対応しています。

TypedArray

へぇ…(´・ω・`)

で、サンプルによってはrecycle()を呼んでるんだけども、
なんでrecycle()を呼ばないといけないのかなと思ってぐぐる。

android – what is the use of recycle() method in TypedArrayでVinayさんは、

それはC言語のポインタのクリアの考えに似てるよ。それが必要ない時にメモリ/データが”a”に非効率的にバインドされないように”a”に関連付けられたデータがガベージコレクションされるようにするために使われるよ。ここを読んで見て(Bitmap#recycle()へのリンク)。あなたが実際に”a”を再利用しないなら、これは実際には必要がないということに注意することが重要だよ。GCはそのオブジェクトが再び使用されないのなら、あなたの為にこのデータを自動的にクリーンアップするはずだよ。しかしながらTypedArrayが異なる理由は以降での使用の為にTypedArrayへ戻さなければならない他の内部データ(StyledAttributes)をTypedArrayを持っているからです。

みたいなことを言っているけどなんかよくわからないw
関係ないけどVinayさんはアフロだね(・∀・)

Bitmap#recycle()では明示的にGCが可能であるとマークするみたいなことを書いてあり、
TypedArray#recycle()は

以降の呼び出し元によって再利用されるためにTypedArrayをリサイクルします。この機能の呼び出しの後、あなたは再びこの型付けされた配列に触れてはいけません。

という感じなので、明示的な破棄の指示をしてるのかどうかよくわからない。
他の人とのやり取りで

TypedArrayに関連付けられたメモリは以降の呼び出し元によって再利用されることが出来るよ、あなたのプログラムのインスタンスじゃなくてね。

みたいなことを言っているのでメモリのアロケーションを保持するってこと(´・ω・`)?
なんか違う?

StyledAttributesを持ってるとあるけどTypedArrayにstaticメンバは居ないような。
staticメソッド TypedArray.obtain()で

final TypedArray attrs = res.mTypedArrayPool.acquire();

して
TypedArray.recycle()で

mResources.mTypedArrayPool.release(this);

してるけど、これのこと?

userSeven7sさんの回答では

recycle()はアロケートされたメモリが直接利用可能なプールへ返されるようにし、ガベージコレクションまで留まりません。このメソッドはまたBitmapでも利用可能です。

とあった。

なんかようわからんヽ( ´・ω・)ノ


他にもサンプルはあったがもう疲れたのでいいや…_| ̄|○

まあ結局のところ、カスタムプリファレンスの作成手順は

  1. 必要ならばattrs.xmlを作って属性を作る
  2. カスタムプリファレンス用のレイアウトを作る
  3. カスタムプリファレンス用のクラスを作る(Preferenceクラスまたはそのサブクラスを拡張)

ということか。

なんかまた横道に逸れて時間を浪費したような気がする…(ヽ’ω`)