[Android] Service使用時はManifestファイルにも記載が必要

Serviceを使うため、Serviceクラスを継承したクラスを用意して、
そのクラスへのIntentを作成して、startService()を実行するように
したのですが、

Serviceクラスを継承したクラスの onCreate() や onStart() が
呼び出されない。

これで、アプリのほうを実行してもエラーはでない。
だけど、サービスは実行されない。


ログを見ると、

Unable to start service Intent { cmp="パッケージ名"/".サービスクラス名"}: not found

と表示されている。


「not found」ということで、起動するサービスが見つからないということですな。
#Activityの場合、エラーが発生してアプリが落ちるのにサービスだと警告なんですね


原因は、「AndroidManifest.xml」ファイルにServiceを記載していなかったことです。

<service android:name="サービス名" />

を追記してあげたら、サービスが動くようになった。


Manifestへの記述は忘れがち、今回のようにエラーでなく警告だと
気付きにくいので、気をつけなくては。

Webセーフカラー(216色)

Webページで背景色や文字色など指定する時に参考になるように
Webセーフカラーの一覧を作成。
以下の色は、異なるWeb環境で見て も同じ色で表示される。

#FFFFFF#FFCCFF#FF99FF#FF66FF#FF33FF#FF00FF
#FFFFCC#FFCCCC#FF99CC#FF66CC#FF33CC#FF00CC
#FFFF99#FFCC99#FF9999#FF6699#FF3399#FF0099
#FFFF66#FFCC66#FF9966#FF6666#FF3366#FF0066
#FFFF33#FFCC33#FF9933#FF6633#FF3333#FF0033
#FFFF00#FFCC00#FF9900#FF6600#FF3300#FF0000

#CCFFFF#CCCCFF#CC99FF#CC66FF#CC33FF#CC00FF
#CCFFCC#CCCCCC#CC99CC#CC66CC#CC33CC#CC00CC
#CCFF99#CCCC99#CC9999#CC6699#CC3399#CC0099
#CCFF66#CCCC66#CC9966#CC6666#CC3366#CC0066
#CCFF33#CCCC33#CC9933#CC6633#CC3333#CC0033
#CCFF00#CCCC00#CC9900#CC6600#CC3300#CC0000

#99FFFF#99CCFF#9999FF#9966FF#9933FF#9900FF
#99FFCC#99CCCC#9999CC#9966CC#9933CC#9900CC
#99FF99#99CC99#999999#996699#993399#990099
#99FF66#99CC66#999966#996666#993366#990066
#99FF33#99CC33#999933#996633#993333#990033
#99FF00#99CC00#999900#996600#993300#990000

#66FFFF#66CCFF#6699FF#6666FF#6633FF#6600FF
#66FFCC#66CCCC#6699CC#6666CC#6633CC#6600CC
#66FF99#66CC99#669999#666699#663399#660099
#66FF66#66CC66#669966#666666#663366#660066
#66FF33#66CC33#669933#666633#663333#660033
#66FF00#66CC00#669900#666600#663300#660000

#33FFFF#33CCFF#3399FF#3366FF#3333FF#3300FF
#33FFCC#33CCCC#3399CC#3366CC#3333CC#3300CC
#33FF99#33CC99#339999#336699#333399#330099
#33FF66#33CC66#339966#336666#333366#330066
#33FF33#33CC33#339933#336633#333333#330033
#33FF00#33CC00#339900#336600#333300#330000


[Android] Activity#onDestroyではFragmentTransactionの操作はできない

ActivityのonDestroy()にFragmentTransactionの処理を記載したら、
commit()処理で以下のエラーが発生した。

Caused by:java.lang.IllegalStateException: can not perform this action after onSaveInstanceState


「onSaveInstanceStateの後にはこのアクションはできません」的なエラーですな。

以下みたいに記載すると実行時にエラーが出る。
@Override
protected void onDestroy() {
FragmentTransaction ft = getFragmentTransaction().beginTransaction();
// 処理する
ft.commit();
}


[Java] ファイル名から拡張子を取り除く

"sample.tex"などのファイル名から拡張子を除いた"sample"の文字列を抽出してみる。

ポイントは以下の2つくらいかな。
String.lastIndexOf() を使用して最後に'.'が出現する位置を取得する。
②先頭から①で取得した位置までを string.substring() で切りだす。


■サンプルコード(拡張子を取り除くメソッド)

public static String sampleMethod(String fileName) {
String newName;

int lastPosition = fileName.lastIndexOf('.');
if (lastPosition > 0) {
newName = fileName.substring(0, lastPosition);
} else {
newName = fileName;
}

return newName;
※ 拡張子が無い場合などは、そのままファイル名を返します。




[Android] 言語設定が日本語であるか判定する

言語設定が日本語になっているか確認するのには、
Localeを使用すれば可能であるようだ。

使用するのは、Locale.getDefault()で以下のように判定する

if (Locale.JAPAN.equals(Locale.getDefault())) {
ここに日本語の場合の処理
} else {
ここに日本語以外の場合の処理
}

他の言語についても判定は可能。
判定する値は以下のリファレンスを参照。
http://developer.android.com/reference/java/util/Locale.html


[CSS] "z-index"を使用して画像を重ねる

画像の重ね合わせ

■サンプルコード







z-indexの指定により、どの画像を前面にするか指定することができます。
値が大きいほど、前面に表示される。
また、positionプロパティをstatic以外(fixed、absolute、relative)を指定しないと有効にならない。


AsyncTaskを使ってプログレスダイアログを表示する場合、画面切り替えに注意。

AsyncTaskをバックグラウンドでデータ読み込み中に、UIスレッド側で
プログレスダイアログを表示していたのですが、
このダイアログ表示中に、端末(画面)を「縦/横」切り替えを行うと、
強制終了してしまいました。

E/AndroidRuntime(23165): java.lang.IllegalArgumentException: View not attached to window manager

実装は、
①onPreExecute:ダイアログを生成してSHOWする(ダイアログはActivityに紐付く)
②doInBackground:データ読み込む
③onPostExecute:ダイアログを破棄する

の順番で処理されるようにします。

原因は、②のタイミングで画面を切り替えた際にActivityが再生成されることで
プログレスダイアログに紐付くActivityが無くなってしまい、
その状態で③のダイアログを破棄した場合、紐付くActivityが存在しなくて
エラーとなってしまうようです。


ひたすら悩んだが名案は浮かばず、以下の方法を採用した。
#ちょっと構造が変わるのでやりたくなかったのですが、落ちるよりは・・・

AndroidManifest.xml に
android:configChanges="orientation"
を記載する。
※ 念のため、locale、keyboardHidden なども追加
プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
#00FFFF#00CCFF#0099FF#0066FF#0033FF#0000FF
#00FFCC#00CCCC#0099CC#0066CC#0033CC#0000CC
#00FF99#00CC99#009999#006699#003399#000099
#00FF66#00CC66#009966#006666#003366#000066
#00FF33#00CC33#009933#006633#003333#000033
#00FF00#00CC00#009900#006600#003300#000000