[Android] Intent.ACTION_BATTERY_CHANGED が通知されてこない。。。

バッテリーの残量変化を監視しようと、Broadcast で Intent.ACTION_BATTERY_CHANGED を
受け取るような実装を以下の方法で検討してみた。

・BroadcastReceiverを継承したクラスを作成
  ⇒ intent.getAction() を見て、Intent.ACTION_BATTERY_CHANGED と一致するか判断する

・Manifestファイルに以下のように記載
    <receiver android:name=".Receiver">
      <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
      </intent-filter>
    </receiver>

これで、レシーバーで ACTION_BATTERY_CHANGED をキャッチして
バッテリーの残量が変化した場合の処理が実装できるかと思っていたのですが、
なぜか、ACTION_BATTERY_CHANGED が通知されてこない。。。

"adb shell" の "am broadcast" コマンドで ACTION_BATTERY_CHANGED を通知すると、
レシーバーに通知されているようですが、、、

悩んでたら、同じ壁に当たった方がいました。

Activity外のBroadcastReceiverでACTION_BATTERY_CHANGED は受けられない?


どうやら、Activityを継承したクラス内に BroadcastReceiver をセットしないと
通知されてこないみたい。
たしかに、ACTION_BATTERY_CHANGED でバッテリー残量を表示しているサンプルコードを
みると皆 Activity を継承したクラス内に処理を書いてる。

対処案は、上記URLの先が非常に参考になった。

・Application クラスの onCreate() でサービス起動
・サービスの onStart() に以下のような実装を行う

intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
Receiver receiver = new Receiver();
registerReceiver(receiver, intentFilter);

service を噛ませることで Intent.ACTION_BATTERY_CHANGED が通知されるようになった。



【エミュレータを使った動作確認】
・telnet を使用する。
・コマンドプロンプトで以下のコマンドを実行
 telnet localhost 5554

 以下が表示される
 ----------------------------------------------------
 Android Console: type 'help' for a list of commands
 OK
 ----------------------------------------------------

・以下のコマンドでバッテリーの残容量を変更
 -------------------------
 power capacity 80
 OK
 power capacity 5
 OK
 -------------------------
 ※数値は任意の値

その他のコマンドや詳細については以下が参考になります。
Emulator - Android エミュレータ

[Eclipse] Androidアプリ開発中にフリーズ

最近、AndroidアプリをEclipseで作成していると、
かなりの頻度でフリーズする。

デバッグ時にLogcatを確認しようとタブを切り替えると、フリーズ。
などなど、影響大。


ということで、改善策が必要な状況なので色々やってみて
一応、フリーズなく動くようになった。

まず、以下のサイトを参考にEclipseの設定を変更。

Android開発中にEclipseがすごい勢いでフリーズする

"eclipse.exe" と同一ディレクトリに入っている "eclipse.ini" の中身を変更
-----
launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-----


の部分を

-----
--launcher.defaultAction
openFile
-vmargs
-XX:MaxPermSize=256m
-----

に変更してみた。

が、、、フリーズは発生してしまう。


サイズを大きくして
-----
--launcher.defaultAction
openFile
-vmargs
-XX:MaxPermSize=512m
-----

としてみたところ、フリーズしなくなった!!


ということで改善成功??


[Windows] ファイルの削除と完全削除

ファイルを削除するとき、ファイルを選択して「DELETE」キーを押すだけで
簡単に削除することができます。

そのファイル削除についてのメモ。

■「DELETE」キーで削除
削除されたファイルは「ごみ箱」に移動されます(ごみ箱から戻せば復活させられる)。
ごみ箱の中で削除を行うことでディスク上から完全に削除されます。

20120812_1.png

■「DELETE」キー + 「SHIFT」キーで削除
削除されたファイルは完全に削除されます。
一発でディスク上から完全に削除することができ、復活できません。

20120812_2.png

ちなみに、ファイルを右クリックして表示される以下のようなメニューも
「SHIFT」キーを押しながら選択することで完全削除が可能になります。

20120812_3.png



[Android] [アクセシビリティ] Missing contentDescription attribute on image

レイアウトに以下のようなImageViewを追加したら、
[アクセシビリティ] Missing contentDescription attribute on image
という警告が出た(lintが出しているらしい)。


<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sample_img">
</ImageView>


調べたらすぐに原因は判明。

contentDescription属性の指定がないからとのこと。
ということで、contentDescriptionを追加したら警告は消えた。


<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sample_img"
android:contentDescription="@string/test">
</ImageView>

setContentDescription や getContentDescription が「API Level4」から
対応しているようなので、前からあった機能のようです。

この属性は、Viewの説明を文字列で指定することで、アクセシビリティを向上させる
ということらしいです。目の不自由なかたなどが、画面上のViewの説明を音声などで
聞くことを可能にする機能らしく、読まれる情報は contentDescription に指定するようです。





[Java] 処理速度を測定

ある処理の実行時間を計測したいことなど時々あるが、
System.currentTimeMillis() を使用すれば簡単に処理時間を
計測することができる。

■簡単なサンプルコードは以下
==================================================================
long start = System.currentTimeMillis();
// *** ここから *****
// 計測したい処理
// *** ここまで *****
long end = System.currentTimeMillis();

// 処理時間 time (単位はミリ秒)
time = end - start;
// アウトプットすれば、ログなどで確認することができる
==================================================================

終了時間から開始時間を引くと実行時間が得られるという
なんとも簡単な仕組みです。


プロフィール

hiiro

Author:hiiro

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

この人とブロともになる

QRコード
QR
Counter