▼ log.i の出力I/lightbox: android.intent.action.BATTERY_CHANGED I/lightbox: level : 10 ( / 100 ) I/lightbox: GOOD I/lightbox: android.intent.action.BATTERY_CHANGED I/lightbox: level : 50 ( / 100 ) I/lightbox: GOOD I/lightbox: android.intent.action.BATTERY_CHANGED I/lightbox: level : 100 ( / 100 ) I/lightbox: GOOD内部クラスや、サブクラスで実装してもいいですが、内容としてはあまりしょっちゅう行うものでも無いし、テストとしては、telnet で adb に power capacity するほうが重要なのでこのような感じになりました。 BroadcastReceiver に代入する処理は、通常のイベント作成と同じく、new の後で CTRL+SPACE で候補を表示させて、BroadcastReceiver を選択すれば自動的に public void onReceive が作成されるので、その中に処理を記述するたけです。
package com.example.lightbox.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { private BroadcastReceiver broadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); Log.i("lightbox", "onResume"); broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.i("lightbox", action); int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1); int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1); Log.i("lightbox", String.format("level : %d ( / %d )",level,scale)); int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1); switch( health ) { case BatteryManager.BATTERY_HEALTH_COLD: Log.i("lightbox", "COLD"); break; case BatteryManager.BATTERY_HEALTH_DEAD: Log.i("lightbox", "DEAD"); break; case BatteryManager.BATTERY_HEALTH_GOOD: Log.i("lightbox", "GOOD"); break; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: Log.i("lightbox", "OVER_VOLTAGE"); break; case BatteryManager.BATTERY_HEALTH_OVERHEAT: Log.i("lightbox", "OVERHEAT"); break; } } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(MainActivity.this.getIntent().ACTION_BATTERY_CHANGED); // レシーバーを登録 MainActivity.this.registerReceiver(broadcastReceiver,intentFilter); } @Override protected void onPause() { super.onPause(); Log.i("lightbox", "onPause"); MainActivity.this.unregisterReceiver(broadcastReceiver); } }
実際には switch 部分すら必要ありませんが、Android のドキュメントを覘くためのヒントとして使っています。 1) BatteryManager 2) BatteryManager.EXTRA_LEVEL adb.exe がある場所 Android Studio で実行して、エミュレータ上で実行されたら、タスクマネージャでプロセスを表示してから、イメージ名をクリックしてソートすると、adb.exe がほぼ一番上に表示されるので、右クリックから『ファイルの場所を開く』を選択すると、でエクスプローラで開く事ができますさらに、エクスプローラでそのフォルダを選択して SHIFT キーを押しながら右クリックして、『コマンドウインドウをここで開く』を選択します。 telnet を使えるように 既に使用している場合は必要無いですが、昨今めったに使う事が無いので Windows で使用できないようになっています。『プログラムと機能』の左サイドにある『Windows の機能の有効化または無効化』で開いたツリーで telnet を有効にします
コマンドプロンプトより adb にアクセス まず、adb devices をコマンドプロンプトで実行して、現在のエミュレータの id を確認します。
List of devices attached emulator-5554 device次に、telnet localhost 5554 を実行して、telnet で adb にアクセスします。Android Console: Authentication required Android Console: type 'authここで、まず auth コマンドでトークンを入力する必要があります。表示された場所にある、.emulator_console_auth_token をテキストエディタで開いてトークンを取得し、auth コマンドで実行します。' to authenticate Android Console: you can find your in 'C:\Users\lightbox\.emulator_console_auth_token' auth トークン文字列 Android Console: type 'help' for a list of commands OKこれでコマンドが使えるようになるので、help と入力して確認しますhelp Android console command help: help|h|? print a list of commands event simulate hardware events geo Geo-location commands gsm GSM related commands cdma CDMA related commands crash crash the emulator instance kill kill the emulator instance network manage network settings power power related commands quit|exit quit control session redir manage port redirections sms SMS related commands avd control virtual device execution qemu QEMU-specific commands sensor manage emulator sensors finger manage emulator finger print debug control the emulator debug output tags rotate rotate the screen clockwise by 90 degrees try 'help使用するのは、power コマンドです。' for command-specific help power allows to change battery and AC power status available sub-commands: display display battery and charger state ac set AC charging state status set battery status present set battery present state health set battery health state capacity set battery capacity statepower capacity 10 のようにして、バッテリーの量を変更するコマンドをクリップボードにコピーしておいて、貼り付けて実行してみて下さい。エミュレータの右上のバッテリーアイコンの量の表示が変わります。すると、LogCat にも表示されるはずです
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する